Я хочу связать пользовательские данные с типом и извлекать эти данные во время выполнения, невероятно быстро.
Это только мое воображение моего идеального мира:
var myInfo = typeof (MyClass) .GetMyInformation ();
это было бы очень быстро ... конечно, это не существует! Если бы это было так, я бы не спрашивал. хе-хе;)
Это способ использования пользовательских атрибутов:
var myInfo = typeof (MyClass) .GetCustomAttribute ("MyInformation");
это медленно, потому что требует поиска строки "MyInformation"
Это способ использования словаря :
var myInfo = myInformationDictionary [typeof (MyClass)];
Это также медленно, потому что это все еще поиск 'typeof (MyClass)'.
Я знаю, что словарь очень быстрый, но этого недостаточно ... он не такой быстрый, как вызов метода. Это даже не тот же порядок скорости.
Я не говорю, что хочу, чтобы это было так же быстро, как вызов метода. Я хочу связать информацию с типом и получить к ней доступ как можно быстрее. Я спрашиваю, есть ли лучший способ или лучший способ сделать это.
Есть идеи ??
Спасибо!
EDIT:
typeof (MyClass), который я упоминал во всех предыдущих фрагментах, на самом деле является переменной ... Я не знаю, что это определенный тип 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
Интерфейс вызова:
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
Я вижу, что у меня недооцененные словари !!! =) * * Тысяча семьдесят-две
Кажется, словарь типа для всего в 3–4 раза медленнее, чем вызов виртуального метода.
Это не тот случай, когда используется словарь строк. Это в 10-12 раз медленнее, чем вызов виртуального метода.
Итак, я доказал, что ошибаюсь!
И, нет, я не делаю ошибки !!! кто-то предположил это в комментарии ниже =)
Спасибо всем.