我想將自定義數據關聯到Type,並在運行時以極快的速度檢索數據。在.Net中將信息與'Type'對象關聯的最有效的性能方式是什麼?
這只是我的想象我的完美的世界,:
VAR MyInfo的= typeof運算(MyClass的).GetMyInformation();
這會很快......當然這不存在!如果是這樣,我不會問。和合)
這是使用定製的方式屬性:
變種MyInfo的= typeof運算(MyClass的).GetCustomAttribute( 「MyInformation」);
這是緩慢的,因爲它需要字符串 「MyInformation」
這是使用一個字典<類型的方式,MyInformation>的查找:
變種MyInfo的= myInformationDictionary [ typeof運算(MyClass的)];
這也很慢,因爲它仍然是'typeof(MyClass)'的查找。
我知道字典非常快,但這還不夠......它不如調用方法那麼快。它甚至不是相同的速度順序。
我不是說我希望它和方法調用一樣快。我想將信息與某種類型相關聯,並儘可能快地訪問它。我在問是否有更好的方法,或者事件是最好的方式。
任何想法??
謝謝!
編輯:
我以前所有的片斷提到typeof運算(MyClass的),是actualy變量...我不知道這是一個特定的MyClass的類型,它可以是任何類型:
類型myType = typeFromSomewhere;
即在這種情況下,MyClass只是說這個類是由我製作的,任何其他類型可能進入這種情況也是由我做的......所以它讀取
的typeof(一個我自己的班,我不知道巫婆一個是它,但它是我的肯定)
編輯:結論
相關字典一些性能測試結果:
Dic.buckets | Dic.Count | Dic.Key | Ops(x17)/s | Avg.Time | Min.Time | Max.Time
-----------------------------------------------------------------------------
17519 | 12467 | Type | 1051538 | 0.95μs | 0.86μs | 0.42ms
919 | 912 | Type | 814862 | 1.23μs | 1.14μs | 0.46ms
1162687 | 912 | Type | 1126382 | 0.89μs | 0.81μs | 0.33ms
919 | 912 | Type | 806992 | 1.24μs | 1.16μs | 0.21ms
17 | 17 | Type | 872485 | 1.15μs | 1.06μs | 0.31ms
-----------------------------------------------------------------------------
36353 | 18160 | String | 227520 | 4.40μs | 3.98μs | 0.47ms
919 | 911 | String | 219159 | 4.57μs | 4.14μs | 0.29ms
1162687 | 911 | String | 236384 | 4.23μs | 3.82μs | 0.41ms
919 | 911 | String | 223042 | 4.49μs | 4.10μs | 0.43ms
17 | 17 | String | 229985 | 4.35μs | 3.94μs | 0.28ms
接口C所有:
ops(x17)/s: 2896001
Average: 0.35μs
Min: 0.34μs
Max: 1.20μs
虛擬呼叫:
ops(x17)/s: 3115254
Average: 0.32μs
Min: 0.32μs
Max: 0.65μs
我看到,我有低估字典! =)
似乎Dictionary類型的任何東西比虛擬方法調用慢3倍到4倍。
這不是使用字符串字典的情況。那些比虛擬方法調用慢10倍到12倍。
所以我已經證實我錯了!
而且,我不會製造導彈!有人認爲這在評論波紋管=)
謝謝大家。
的使用如果性能是問題的心臟請張貼硬性能要求通過解決方案將被判定(即每秒迭代的最小數量)。 – 2010-04-30 19:42:13
我很想知道你寫的是什麼樣的超級程序,它的性能可靠,以至於字典被認爲太慢了。它必須像導彈或其他必須使用這些數據每秒鐘執行數百萬計算的東西。 – 2010-04-30 19:47:26
您是否真的實現了它,並測量了屬性或字典「太慢」?除非你的字典包含大量的條目,否則我懷疑你會遇到性能問題。 – 2010-04-30 20:02:36