2012年1月29日日曜日

[C#]ConcurrentDictionaryをDictionaryのように扱う

マルチスレッドな処理系アプリケーションで、Dictionary クラスを使う際は毎度排他ロックをかけていて面倒だと感じていましたが、.NET Framework 4.0 から ConcurrentDictionary クラスなるものが登場し、その煩わしさが解消されました。

このクラスは追加や削除時は自動で排他制御を行ってくれるという優れもの(性能面ではそうとはいえないけれども。。。)なのです。

使い方は下記に詳しいが、簡単に言うと Dictionary クラスとは別物なので使い方が変わってしまっているのです。

■方法: ConcurrentDictionary の項目を追加および削除する
http://msdn.microsoft.com/ja-jp/library/dd997369.aspx

きっと使い勝手はよくなっているとは思うのですが、従来の Dictionary と同じように扱いたいという場合は、なんてことない。IDictionary でインスタンスを受け取るようにすればよさそうです。

            IDictionary dictionary = new ConcurrentDictionary();

どこにもそんなやり方書かれてないので、正しいかどうかは不明ですが(使う場合は自己責任でお願いします)、色々試してみたところ、いちお、排他制御はかかっているみたい。

0 件のコメント:

コメントを投稿