Несколько советов по оптимизации C# приложений

понедельник, 12 октября 2009, Александр Краковецкий

Использование класса StringBuilder

При работе с большими строками (текстом) лучше пользоваться классом StringBuilder, а не методами класса String:

StringBuilder builder = new 
builder.Append("This is my first stringbuilder program");
builder.AppendLine();
builder.Append("I am appending here").AppendLine();
string appendString = builder.ToString();

Сравнение строк, не учитывая регистр

Сравнивать строки можно несколькими способами:

str1.ToLower() == str2.ToLower()

Или так:

string.Compare(str1, str2, true) == 0 //Не учитываем регистр

Или таким образом:

str1.Equals(str2, StringComparison.OrdinalIgnoreCase)

Лучше использовать последних два варианта, так как первый требует больше производительности.

Использование String.Empty

Вместо

string str = "";

необходимо использовать

string str = string.Empty;

На производительность это никак не влияет, но рекомендуют использовать второй вариант.

Использование List вместо ArrayList

ArrayList необходимо использовать только в крайних случаях, вместо него нужно использовать List (generic types). Выигрыш в производительности - в два и больше раза на больших массивах данных. Основное время в ArrayList тратится на упаковку и распаковку (boxing и unboxing) типов данных.

ArrayList intList = new ArrayList();
List<int> intList = new List<int>();

Использование операторов && и ||

Например вместо выражения

if (obj != null)
    if (obj.GetValue() == 1) { // some logic }

правильней писать

if (obj != null && obj.GetValue() == 1) { // some logic }

Если первое выражение - false, то второе не выполнится.

Преобразование типов

Вместо выражения

SomeObj obj = (SomeObj)this.FindControl("myControl");

необходимо использовать

SomeObj obj = this.FindControl("myControl") as SomeObj;
if (obj != null) { // some logic }

Если myControl не типа SomeObj, то в первом случае будет выдано исключение. Во втором случае obj будет равно null.

Кроме того, можно использовать оператор is для сравнения типов:

if (obj is string) { // some logic }

Использование оператора ?

Для простых вариантов вместо if... else... можно использовать оператор ?. Выражение

string str = (enabled) ? "true" : "false";

равнозначно:

string str = string.Empty; 
if (enabled) 
    str = "true";
else 
    str = "false";

но занимает меньше места.

Использование оператора ??

Выражение:

string str = (obj) ?? string.Empty;

равнозначно:

string str;
if (obj == null)
    str = strig.Empty;
else
    srt = obj;

Проверка строки на null

Правильный вариант:

if (string.IsNullOrEmpty(str))

вместо

if (str == null)

Я остановился на простых вариантах оптимизации кода, частично использовал материал этой статьи.

P.S. Если у вас есть свои варианты оптимизация кода, пишите в комментраиях.


Ищите нас в интернетах!

Комментарии

Свежие вакансии