2

私は現在、次のものを持っています:

ConcurrentDictionary<ulong, MyEventHandler> eventHandlers;

クラスの数は不定です:

class MyClass1
{
    public const ulong MyKey = 0;
    ... 
}

class MyClass2
{
    public const ulong MyKey = 1;
    ... 
}

...等...

私の辞書は、クラスのタイプに対応するイベント ハンドラーを保持することです。現在、MyKeyメンバーを辞書のキーとして使用していますが、これは正常に機能します。

ただし、他のクラスが現在および将来開発される場合、開発者にキーを持たなければならないことを心配させたくありません。

以下の処理がどれだけ遅いか (もしあったとしても):

ConcurrentDictionary<Type, MyEventHandler> eventHandlers;

次に、typeof演算子を使用して Type を取得し、辞書にインデックス付けしますか?

そうすれば、鍵について心配する必要はありません。

ディクショナリのエントリ数が 100 を超える可能性は低いですが、typeofが呼び出され、ディクショナリは 1 秒あたり何千回もアクセスされるため、速度については非常に気になります。

4

3 に答える 3

1

ディクショナリがシングルトン/マルチトンの場合、ジェネリック型を作成して、このパターンでインデックス作成を高速化できます。

static class MyHandler<T>
{
    static public MyEventHandler Value;
}

それ以外の

CurrentDictionary[typeof(Class1)]

できるよ

MyHandler<Class1>.Value
于 2014-12-31T07:37:20.527 に答える
0

これは、GetHashCode()実装方法によって異なります。.Net Framework コードがディクショナリ内のオブジェクトを「検出」すると、このメソッドを呼び出して検索を実行します。明らかに、型に基づくキーを使用するディクショナリでは、 やGetHashCode()の値を単に取得するよりも の実装にかなり長い時間がかかります。そのディクショナリでは、それに比例してパフォーマンスが低下します。longuLong

于 2013-05-22T20:01:56.527 に答える