何となくperformance tips
Arrayを確保すればいいところを、無駄にArrayListとか使ったりしていることってないですか?
これは昨日の自分のcommitを読みやすいようにちょっと書き換えたdiffですが、こんだけでTotal memory allocatedが104304 KBから84771 KBくらいになることもありました。
Hashtable addNewCache = this.addNewCache;
rows = dataTable.Select (rowFilterExpr, null, RowStateFilter);< ArrayList al = new ArrayList ();< al.AddRange (rows);< al.AddRange (addNewCache.Keys);< rows = (DataRow []) al.ToArray (typeof (DataRow));
> DataRow [] tmp = new DataRow [rows.Length + addNewCache.Count];
> rows.CopyTo (tmp, 0);
> addNewCache.Keys.CopyTo (tmp, rows.Length);
> rows = tmp;
もちろんメモリ確保量の大きいところを直さないと意味がないわけですが、mono --profileを使うと、メモリプロファイルの結果を最後の方に出力してくれるので、それなりに効率的に最適化ができます。