.NET のパフォーマンスを最適化する
1) ArrayList の使用を避けます。
ArrayList に追加されるオブジェクトはすべて System.Object 型としてボックス化する必要があるため、ArrayList からデータを取得するときは、ボックス化を解除して実際の型に戻す必要があります。 ArrayList の代わりにカスタム コレクション タイプを使用することをお勧めします。 .net 2.0 では、ジェネリックと呼ばれる新しい型が提供されています。これは強力な型であり、ジェネリック コレクションを使用すると、ボックス化とボックス化解除が回避され、パフォーマンスが向上します。
2) 少量のデータを保存する場合は、他の辞書コレクション タイプ (StringDictionary、NameValueCollection、HybridCollection など) の代わりに HashTale を使用します。
3) 文字列コンテナーの定数を宣言し、文字を二重引用符で直接カプセル化しないでください。 」。
//避ける
//
MyObject obj = new MyObject();
obj.Status = "アクティブ"
//推奨
const string C_STATUS = "アクティブ";
MyObject obj = new MyObject();
obj.Status = C_STATUS;
4) 比較用の文字列の変換に UpperCase または Lowercase を使用しないで、代わりに String.Compare を使用します。これにより、比較時に大文字と小文字が無視されます。
例:
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);
while(xpNodeIter.MoveNext())
{
sCurrValues += xpNodeIter.Current.Value+"~";
}
7) ループ本体内での変数の宣言は避け、ループ外で変数を宣言し、ループ本体内で初期化してください。
//避ける
for(int i=0; i<10; i++)
{
SomeClass objSC = new SomeClass();
。
。
。
}
//推薦する
SomeClass objSC = null;
for(int i=0; i<10; i++)
{
objSC = 新しい SomeClass();
。
。
。
8
) 指定された例外をキャッチします。一般的な System.Exception は使用しないで
ください
。
試す
{
<いくつかのロジック>
}
catch(例外を除く)
{
<エラー処理>
}
//推薦する
試す
{
<いくつかのロジック>
}
catch(System.NullReferenceException exc)
{
<エラー処理>
}
catch(System.ArgumentOutOfRangeException exc)
{
<エラー処理>
}
catch(System.InvalidCastException exc)
{
<エラー処理>
9) Try...catch...finally を使用する場合は、接続、ファイル ストリームなどの占有されたリソースを最終的に解放する必要があります。そうしないと、Catch でエラーが捕捉された後に占有されたリソースを解放できません
。
試す
{
...
}
キャッチ
{...}
ついに
{
connection.close()
}
10) 再帰呼び出しとネストされたループの使用は、パフォーマンスに重大な影響を与えるため、必要な場合にのみ使用してください。
11) 適切なキャッシュ戦略を使用してパフォーマンスを向上させます。時間があれば詳しく書きます。
http://www.cnblogs.com/timone/archive/2006/11/17/563965.html