Оптимизация производительности .NET.
1) Избегайте использования ArrayList.
Поскольку любой объект, добавленный в ArrayList, должен быть упакован как тип System.Object, при получении данных из ArrayList его необходимо распаковать обратно в фактический тип. Вместо ArrayList рекомендуется использовать собственный тип коллекции. .net 2.0 предоставляет новый тип, называемый дженериками, который является строгим типом. Использование универсальных коллекций позволяет избежать упаковки и распаковки и повысить производительность.
2) Используйте HashTale вместо других типов коллекций словарей (таких как StringDictionary, NameValueCollection, HybridCollection). HashTable можно использовать при хранении небольшого объема данных.
3) Объявляйте константы для строковых контейнеров и не заключайте символы напрямую в двойные кавычки». ".
//избегать
//
MyObject obj = новый MyObject();
obj.Status = "АКТИВНО";
//Рекомендуется;
константная строка C_STATUS = «АКТИВ»;
MyObject obj = новый MyObject();
obj.Status = C_STATUS;
4) Не используйте верхний или нижний регистр для преобразования строк для сравнения. Вместо этого используйте String.Compare, который может игнорировать регистр для сравнения.
пример:
константная строка C_VALUE = «СРАВНЕНИЕ»;
если (String.Compare(sVariable, C_VALUE, true) == 0)
{
Console.Write("ТО ЖЕ");
}
5) Используйте StringBuilder вместо символа объединения строк «+»,
//Избегайте
.
Строка sXML = "<родитель>";
sXML += "<дочерний элемент>";
sXML += "Данные";
sXML += "</child>";
sXML += "</parent>";
//Рекомендуется
StringBuilder sbXML = новый StringBuilder();
sbXML.Append("<родитель>");
sbXML.Append("<дочерний>");
sbXML.Append("Данные");
sbXML.Append("</child>");
sbXML.Append("</parent>");
6) Если вы читаете только объект XML, избегайте использования XMLDocumentt, вместо этого используйте XPathDocument, который доступен только для чтения и тем самым повышает производительность.
Если вы читаете данные только из объектов XML, используйте XPathDocument только для чтения вместо XMLDocument, чтобы повысить производительность.
//избегать
XmlDocument xmld = новый XmlDocument();
xmld.LoadXml(sXML);
"
).InnerText
.
XPathDocument xmldContext = новый XPathDocument (новый StringReader (oContext.Value));
XPathNavigator xnav = xmldContext.CreateNavigator();
XPathNodeIterator xpNodeIter = xnav.Select("пакет/дочерний");
iCount = xpNodeIter.Count;
xpNodeIter = xnav.SelectDescendants(XPathNodeType.Element, false);
в то время как (xpNodeIter.MoveNext())
{
sCurrValues += xpNodeIter.Current.Value+"~";
}
7) Избегайте объявления переменных в теле цикла. Объявляйте переменные вне цикла и инициализируйте их в теле цикла.
//избегать
for(int я=0; я<10; я++)
{
SomeClass objSC = новый SomeClass();
.
.
.
}
//рекомендуем
SomeClass objSC = ноль;
for(int я=0; я<10; я++)
{
objSC = новый SomeClass();
.
.
.
}
8) Перехватывать указанное исключение, не использовать общее исключение System.Exception
.
пытаться
{
<немного логики>
}
улов (исключение)
{
<Обработка ошибок>
}
//рекомендуем
пытаться
{
<немного логики>
}
catch(System.NullReferenceException exc)
{
<Обработка ошибок>
}
catch(System.ArgumentOutOfRangeException exc)
{
<Обработка ошибок>
}
catch(System.InvalidCastException exc)
{
<Обработка ошибок>
}
9) При использовании Try...catch...finally занятые ресурсы, такие как соединения, потоки файлов и т. д., должны быть освобождены наконец. В противном случае занятые ресурсы не могут быть освобождены после обнаружения ошибки в Catch.
пытаться
{
...
}
ловить
{...}
окончательно
{
соединение.закрыть()
}
10) Избегайте использования рекурсивных вызовов и вложенных циклов. Их использование серьезно повлияет на производительность. Используйте их только тогда, когда их необходимо использовать.
11) Используйте подходящие стратегии кэширования для повышения производительности. На сегодня это все. Я напишу больше, когда у меня будет время.
http://www.cnblogs.com/timone/archive/2006/11/17/563965.html