1. Knowing when to use StringBuilder
You must have heard before that a
StringBuilder object is much faster at appending strings together than
normal string types.
The thing is StringBuilder
is faster mostly with big strings. This means if you
have a loop that will add to a single string for many iterations then a StringBuilder class is definitely much faster
than a string type.
However if you just want to append
something to a string a single time then a StringBuilder
class is overkill. A simple string type
variable in this case improves on resources use and readability of the
C# source code.
Simply choosing correctly between StringBuilder objects and string types you can
optimize your code.
2. Comparing Non-Case-Sensitive Strings
In an application sometimes it is
necessary to compare two string variables, ignoring the cases. The
tempting and traditionally approach is to convert both strings to all
lower case or all upper case and then compare them, like such:
str1.ToLower() == str2.ToLower()
However repetitively calling the function ToLower() is a bottleneck in performace. By
instead using the built-in string.Compare() function
you can increase the speed of your applications.
To check if two strings are equal ignoring
case would look like this:
string.Compare(str1, str2, true) == 0 //Ignoring cases
The C# string.Compare
function returns an integer that is equal to 0 when the two strings are
equal.
3. Use string.Empty
This is not so much a performance
improvement as it is a readability improvement, but it still counts as
code optimization. Try to replace lines like:
if (str == "")
with:
if (str == string.Empty)
This is simply better programming practice
and has no negative impact on performance.
Note, there is a popular practice that
checking a string's length to be 0 is faster than comparing it to an
empty string. While that might have been true once it is no longer a
significant performance improvement. Instead stick with string.Empty.
4. Replace ArrayList with List<>
ArrayList
are useful when storing multiple types of objects within the same list.
However if you are keeping the same type of variables in one ArrayList, you can gain a performance boost by
using List<> objects instead.
Take the following ArrayList:
ArrayList intList = new ArrayList();
intList.add(10);
return (int)intList[0] + 20;
Notice it only contains intergers. Using
the List<> class is a lot better. To
convert it to a typed List, only the
variable types need to be changed:
List<int> intList = new List<int>();
intList.add(10)
return intList[0] + 20;
There is no need to cast types with List<>. The performance increase can be
especially significant with primitive data types like integers.
5. Use && and || operators
When building if statements, simply make
sure to use the double-and notation (&&)
and/or the double-or notation (||), (in
Visual Basic they are AndAlso and OrElse).
If statements that use & and | must
check every part of the statement and then apply the "and" or "or". On
the other hand, && and || go thourgh the statements one at a time and
stop as soon as the condition has either been met or not met.
Executing less code is always a performace
benefit but it also can avoid run-time errors, consider the following C#
code:
if (object1 != null && object1.runMethod())
If object1 is
null, with the && operator, object1.runMethod()will not execute. If the && operator is replaced with &, object1.runMethod() will run even if object1
is already known to be null, causing an exception.
6. Smart Try-Catch
Try-Catch
statements are meant to catch exceptions that are beyond the programmers
control, such as connecting to the web or a device for example. Using a
try statement to keep code "simple"
instead of using if statements to avoid
error-prone calls makes code incredibly slower. Restructure
your source code to require less try
statements.
7. Replace Divisions
C# is relatively slow when it comes to
division operations. One alternative is to replace divisions with a
multiplication-shift operation to further optimize C#. The article explains in detail how to
make the conversion.
Conclusion
As you can see these are very simple C# code optimizations and yet they can have a powerful impact on the performance of your application. To test out the optimizations, try out the free Optimizing Utility.Profiling
An important concept when it comes to increasing the speed and efficiency of you C# code, is code profiling. A good profiler can not only let you know about the speed bottlenecks in your applications, but it can also help you with memory management. The best .Net profiler is probably RedGates ANTS Profiler. They have a free trial at their homepage you can download before purchasing the full product.Source: http://www.vcskicks.com/optimize_csharp_code.php
2 comments:
Thanks for your nice article. I have found a fine article also. I want to share it
We should follow standard naming convention.
The variables and methods/functions name should be relevant and small as far as possible.
Use X++ instead of X=X+1. Both returns the same result but X++ use fewer characters.
for more....
http://cybarlab.com/c-sharp-code-optimization-tips
Hope it will help us.
The article is very useful information about code optimization, just one to share one link which I recently found about code optimization using strginbuilder, the thing which I like most about that article is that author give sample code by executing which we can clearly see the execution timing difference between stringbuilder append method and string concatenation, I hope you also share some sample code in your next article :)
Đăng nhận xét