Просто пытаясь окунуться в Generics, прочитав this enlightening article by Juval LowyКакова производительность с понижением?
Перефразируя .. Когда вы определяете определение класса Generic, оно скомпилируется в IL.
- Для типов значений, как только вы запрашиваете определенный тип значения, он заменяет T вашим конкретным типом значения, чтобы получить IL для этой конкретной конфигурации, например.
MyList<int>
Пособие: нет бокса и штрафных санкций. - Все хорошие .. для ссылочных типов компилятор заменяет все экземпляры T в вашем определении на Object и создает IL, который используется для всех типов ref. Однако экземпляры распределяются на основе фактического запрашиваемого типа ссылки, например.
MyList<String>
В настоящее время мы предлагаем письменные методы, которые принимают параметры Object
. Дженерик требуют повышений производительности 100%, потому что «это позволяет избежать потерь производительности, которые вы понесете, когда обратное приведение типа объекта к специфическому типу, когда вы хотите использовать его»
// assume GetItem returns an Object
string sMyPreciousString = (string) obList.GetItem();
Что это падение производительности, когда вы опущенный от Объект для конкретного ссылочного типа? Также кажется, что up-casting для Object (даже Generics сделал бы это) не является хитом производительности .. почему?
Простой, когда вы это знаете ... простой IL instr isinst для 100% -ного совершенствования :) – Gishu 2008-11-20 18:08:08