PRB: High CPU Utilization in Web Service or Web Form

Article translations Article translations
Article ID: 307340 - View products that this article applies to.
This article was previously published under Q307340
This article refers to the Microsoft .NET Framework Class Library System.Text namespace.
Expand all | Collapse all

SYMPTOMS

You may notice that your production Web server has 100 percent CPU utilization and slow response times, even under light load.

CAUSE

This problem frequently occurs when your application performs many string concatenations, such as dynamically building HTML or XML strings. In this scenario, Aspnet_wp.exe (or W3wp.exe , for applications that run on IIS 6.0) is the offending process. You can see evidence of this problem in Task Manager on the Processes tab or in the Performance Monitor counter.

RESOLUTION

Use one of the following methods to resolve this problem.

Solution 1

Use the System.Text.StringBuilder class to perform the concatenations. For additional information, click the article number below to view the article in the Microsoft Knowledge Base:
306821 HOW TO: Improve String Concatenation Performance in Visual Basic .NET

Solution 2

Use the Response.Write method (for Web Forms) instead of concatenation to stream the text.

Note This solution assumes that your code is in ASP-style render blocks. For example:
<%@ Page Language="vb" AutoEventWireup="false" Codebehind="mypage.aspx.vb" Inherits="myproject._mypage"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
   <body>
      <form id="Form1" method="post" runat="server">
         <asp:Button id="Button1" runat="server" Text="Button1"></asp:Button>
         <p></p>
         <% 
            Response.Write("My ") 
            Response.Write("streamed ")
            Response.Write("text")
         %>
         <p></p>
      <asp:Button id="Button2" runat="server" Text="Button2"></asp:Button>
      </form>
   </body>
</HTML>
				

STATUS

This behavior is by design.

MORE INFORMATION

String concatenation is notoriously inefficient. It involves character copies on the order of "l * n * n," where "l" is the average string length, and "n" is the number of substrings that are concatenated together. When "n" is a large value, your application can dramatically slow, and the concatenation can exhaust both the CPU and the heap. StringBuilder efficiency is on the order of "n * l," if you can reasonably estimate the buffer size in advance. StringBuilder is somewhat less efficient if it needs to grow the internal buffer but is still much better than concatenation.

Properties

Article ID: 307340 - Last Review: August 24, 2005 - Revision: 3.7
APPLIES TO
  • Microsoft Web Services Enhancements for Microsoft .NET 1.1
  • Microsoft ASP.NET 1.1
  • Microsoft ASP.NET 1.0
  • Microsoft Web Services (included with the .NET Framework) 1.0
Keywords: 
kbperformance kbprb kbwebforms KB307340

Give Feedback

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com