簡體   English   中英

在C#中,其鍵的類型類型的字典是否比其鍵的類型為ulong的字典慢?

[英]In C#, is a dictionary whose keys are of type Type slower than a dictionary whose keys are of type ulong?

我目前有以下內容:

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並每秒對字典進行數千次訪問。

類型由元數據令牌表示和標識,我猜這是32位整數。 typeof運算符在元數據表中進行查找,以找到由元數據令牌表示的Type。

我相信JIT編譯器會很好地優化元數據表訪問,因此,我認為您不應該注意到現實中的任何性能差異。 如果使用Type作為鍵甚至會證明速度稍快,我實際上不會感到驚訝。

因為使用Type作為鍵會使代碼更易於維護,所以我建議您采用這種方法,除非您可以證明另一種方法顯然更有效。

如果您的字典是單例/多例,則可以通過以下模式創建通用類型以加快索引編制速度:

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

代替

CurrentDictionary[typeof(Class1)]

你可以做

MyHandler<Class1>.Value

這取決於如何實現GetHashCode() 當.Net框架代碼“查找”字典中的對象時,它將調用此方法來執行搜索。 顯然,在任何使用基於類型的鍵的字典中,與僅檢索longuLong的值相比, GetHashCode()的實現所花費的時間要長得多,該字典的性能將成比例地uLong

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM