.NET 성능 최적화
1) ArrayList를 사용하지 마십시오.
ArrayList에 추가된 모든 개체는 System.Object 유형으로 박싱되어야 하므로 ArrayList에서 데이터를 검색할 때 실제 유형으로 다시 박싱을 해제해야 합니다. ArrayList 대신 사용자 정의 컬렉션 유형을 사용하는 것이 좋습니다. .net 2.0은 강력한 유형인 제네릭이라는 새로운 유형을 제공합니다. 제네릭 컬렉션을 사용하면 박싱 및 언박싱을 방지하고 성능을 향상시킬 수 있습니다.
2) 다른 사전 컬렉션 유형(예: StringDictionary, NameValueCollection, HybridCollection) 대신 HashTable을 사용합니다. 소량의 데이터를 저장할 때 HashTable을 사용할 수 있습니다.
3) 문자열 컨테이너에 대한 상수를 선언하고 문자를 큰따옴표로 직접 캡슐화하지 마세요. ".
//피하다
//
MyObject obj = new MyObject();
obj.Status = "ACTIVE"
//권장
const string C_STATUS = "ACTIVE";
MyObject obj = new MyObject();
obj.Status = C_STATUS;
4) 비교를 위해 문자열을 변환하는 데 대문자 또는 소문자를 사용하지 마십시오. 대신 비교를 위해 대소문자를 무시할 수 있습니다.
예:
const string C_VALUE = "비교";
if (String.Compare(sVariable, C_VALUE, true) == 0)
{
Console.Write("동일");
}
5) 문자열 연결 문자 "+"를 사용하는 대신 StringBuilder를 사용하십시오.
//피하십시오
.
문자열 sXML = "<부모>";
sXML += "<자식>";
sXML += "데이터";
sXML += "</child>";
sXML += "</parent>"
//권장
StringBuilder sbXML = new StringBuilder();
sbXML.Append("<부모>");
sbXML.Append("<자식>");
sbXML.Append("데이터");
sbXML.Append("</child>");
sbXML.Append("</parent>");
6) XML 객체에서만 읽는 경우 XMLDocumentt를 사용하지 말고 대신 읽기 전용인 XPathDocument를 사용하면 성능이 향상됩니다.
XML 객체의 데이터만 읽는 경우 XMLDocument 대신 읽기 전용 XPathDocument를 사용하면 성능이 향상됩니다.
//피하다
XmlDocument xmld = new XmlDocument();
xmld.LoadXml(sXML);
txtName.Text = xmld.SelectSingleNode("/packet/child").
InnerText
;
XPathDocument xmldContext = new XPathDocument(new 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 i=0; i<10; i++)
{
SomeClass objSC = 새로운 SomeClass();
.
.
.
}
//추천하다
SomeClass objSC = null;
for(int i=0; i<10; i++)
{
objSC = 새로운 SomeClass();
.
.
.
}
8) 지정된 예외를 포착하고 일반 System.Exception을 사용하지 마십시오
.
노력하다
{
<일부 논리>
}
catch(예외 제외)
{
<오류 처리>
}
//추천하다
노력하다
{
<일부 논리>
}
catch(System.NullReferenceException 예외)
{
<오류 처리>
}
catch(System.ArgumentOutOfRangeException 예외)
{
<오류 처리>
}
catch(System.InvalidCastException 예외)
{
<오류 처리>
}
9) Try...catch...finally를 사용할 경우 연결, 파일 스트림 등 점유된 리소스를 finally에서 해제해야 합니다. 그렇지 않으면 Catch에서 오류가 발생한 후 점유된 리소스를 해제할 수 없습니다.
노력하다
{
...
}
잡다
{...}
마지막으로
{
연결.닫기()
}
10) 재귀 호출 및 중첩 루프를 사용하지 마십시오. 이를 사용하면 성능에 심각한 영향을 미칠 수 있습니다.
11) 성능 향상을 위해 적절한 캐싱 전략을 사용하십시오. 오늘은 시간이 나면 더 많이 작성하겠습니다.
http://www.cnblogs.com/timone/archive/2006/11/17/563965.html