[英]Find properties of an object that are dictionary whose keys are of certain type
[英]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框架代碼“查找”字典中的對象時,它將調用此方法來執行搜索。 顯然,在任何使用基於類型的鍵的字典中,與僅檢索long
或uLong
的值相比, GetHashCode()
的實現所花費的時間要長得多,該字典的性能將成比例地uLong
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.