不勉強にも、”NameValueCollection”の存在を知りませんでした。
で、イロイロ調べていくと、「Key(string)」と「Value(string)」を格納するDictionaryのようなもので、Keyで検索できるという機能が、.NET 1.1環境では特長になります。
.NET 2.0 では、Generic.Dictionary が使えるので、どちらを使おうか、若干悩ましいかもしれません。
それぞれ、リファレンスはコチラです。
・NameValueCollection
(System.Collections.Specialized 名前空間)
・Dictionary
(System.Collections.Generic 名前空間)
で、要素を追加して、読み取って…と言うのを繰り返してみました。
1,000,000要素で…
NameValueCollection追加 -> 約15秒
NameValueCollection取得 -> 約1.93秒
GenericDictionary追加 -> 約7.56秒
GenericDictionary取得 -> 約1.35秒
結構差がつきました。
しかし、1000要素では
NameValueCollection追加 -> 約0.02秒
NameValueCollection取得 -> 約0秒
GenericDictionary追加 -> 約0秒
GenericDictionary取得 -> 約0秒
と、ほとんどかわりません。
メモリ使用量までの統計は取っていませんが、少量のデータを操作する分には、さしてかわらないようです。
ま、ひとつのベンチマーク結果ということで。
System.Collection.Hashtableとはまた違うんでしょうか?(^^;
あ、String固定なんですね(^^;
そうなんです。
String固定なんです。
System.Collections.Specialized という地味な所にあるため、私も気づきませんでした。
で、MSDNを漁って行くと、興味深いことに気づきました。
System.Net.WebHeaderCollection
System.Web.HttpClientCertificate
は、この NameValueCollection を使っていると言うことです。
たしかに、WebHeaderの処理にはこのテのものが必要ですからねぇ、PerlのHashみたいに。
いやぁ、奥深いです。