50 Tips to Boost Performance of an ASP.NET Application – Part 2

Continuing from ASP.NET Performance Tips Part 1 we now conclude with Performance Tips 26-50.

26. Batched Queries:

Queries can
be used in a batch and thus network traffic can be reduced: Here is an example:

EmpNo, EmpName, EmpAddress from Employee”;

DepNo, DeptName From Department”;

From the
above two queries it seems that there will be database hit twice .

Both the
above queries can be executed in batched form and a single database hit will
occur as follows:

EmpNo, EmpName, EmpAddress from Employee; Select DepNo, DeptName From

27. Use IIS Compression

Page size can also be reduced using Http compression in IIS.
Compression tool can also be used to reduced the size of rendered content.


28. Normalization

We should follow normalization rules in database table
design but over Normalized tables can cause  excessive joins for simple requirement.
We should not make excessive joins for performance overhead and hence it is
better to normalize only as much as required keeping in mind the
performance issue.

29. Efficient Coding

While coding we should keep in mind the below issues which are potential performance drains:

Avoid use of Finalize method unless it is
absolutely necessary.

Make a class sealed if inheritance is not

Avoid calling GC.Collect();

Use X+=1 instead X=X+1 to avoid evaluating X twice;

Use overloaded methods instead of different
method names where possible.

30. Define The Scope of An Object

Defining an object’s scope properly increases efficient memory
management and thus improve performance. We should keep the object scope at a lower level instead of a global level if possible because the garbage collector
works more frequently on short lived object .

31. Using Loops

We should keep in mind while using loops in our code:

Better to use for a loop instead of foreach.

Do not create objects inside loop if not required

Calling methods and properties inside loops is expensive.

Evaluating count etc. before loop starts. For

for(int i=0;i<Grid.Rows.Count;i++) {}can be written as

int iCount= Grid.Rows.Count; for(int i=0;i< iCount;i++){}

Never write exception handling code inside loop.
Keep the exceptions handling code outside of the loop for better performance.

32. Dispose Instead of Finalize

Avoid using Finalize unless it is absolutely necessary. It is normally better to dispose of unmanaged resources if no longer required.

33. Minimize Thread Creation

Avoid creating threads on a per-request basis. Also avoid
using Thread.Abort or Thread.Suspend.

34. Leave Connection pooling Enable

Connection Pooling is enabled by default. It boosts
application performance as existing connections can be re-used from the pool rather
than created . Leave this option enabled.

35. Using Blocks

Using blocks can be used as a short form of try..finally and
it should be used only for those objects that implement the iDisposable interface.
Here is a code snippet.

con=new SqlConnection(connectionString)





//some code







In the above
example,there is no need to dispose of the connection object. The Connection object
will be disposed automatically when it is out of scope.



36. Error Handling in Global.asax

Although implementing an error handling in Global.asax does not
necessarily increase the performance of the application, it helps to
identify unexpected exceptions that might occur in the application.

37. Efficient String Handling

We should keep in mind the followings when using string
object in code.

Use the Equals method of the string object instead of the ==
operator for comparison purposes.

Use String.Empty for creation of an empty string
instead of “”;

Use String.Length for checking an empty string.

Do not create string instances inside of loop.

Use StringBuilder for concating more than 4

38. Selection of Collection object

While working with the collection object, we should choose
a proper collection object just to avoid the boxing and unboxing overhead. Strongly
typed arrays are always preferable otherwise a generic list is a better choice to
avoid boxing and unboxing. For example:

list=new List<string>();





39. Build Assemblies in Release Mode

When deploying assemblies to the production server build the
assemblies in Release mode.

40. Kernel Caching

Use kernel caching for IIS6.0 or higher.

41. Obfuscation

Obfuscated assemblies to reduce size and improve

42. Application Pooling

An application pool can cover one or more applications but
it is optimal to maintain an application pool for each application separately to
improve maintainability and scalability. Proper recycle intervals can be set
for our application pools in IIS so that the connectivity in the web server
will never be lost.

43. Compiled LINQ queries

In compiled LINQ queries the query plan is cached in a
static class. So there is no need for
building the query plan from scratch as  LINQ uses the query plan from the static class
which acts like  a global cache. As a
result there is a significant performance gain.


When there are several processors in a system, PLINQ can help to speed up execution of various operations such as processing a collection
of items from a database.

45. Use Ajax

In a data driven and interactive web application we should
avail of the performance improvements of ASP.NET Ajax.

46. Minimize the content in UpdatePanels.

UpdatePanels are a very powerful and easy-to-use but they add
a lot of overhead. Instead of having a single UpdatePanel wrapping a lot
of content, only include the parts of the page that need to be updated in the
UpdatePanel. Use multiple UpdatePanels on a page if necessary.

47. Literals Not Labels

There is a temptation to use only labels when rendering text
on a page. Labels always add a <span> tag around the text, instead
consider using Literals which add no additional markup.

48. Use The Repeater Control

The Repeater control is lighter-weight than other
alternatives such as DataLists or GridViews, so where possible use the Repeater

49. Avoid Nested User Controls

User controls are a powerful way to re-use page elements but
they do add a performance cost to page rendering. Nesting user controls is an
even bigger drain on resources and should be avoided where possible.


50. Use SqlDataReader Instead of Dataset :

DataReader is faster than DataSet. While reading a table sequentially we should use the
DataReader instead of  DataSet.
The DataReader object creates a read only and forward only stream of data that will
increase application performance because only one row is in memory at a time.



If you are looking for additional resources  –  10 Best Practices to Boost Website Speed on CloudHostingMag.com is a good place to start.


No comments yet... Be the first to leave a reply!