Единственный способ узнать это измерить.
Вариант "type1" никоим образом не надежен и не рекомендуется, так как не все типы могут быть построены. Хуже того, он выделяет память, которая должна быть сборщиком мусора, и вызывает конструкторы объектов.
Что касается оставшихся двух вариантов, на моей машине «тип 3» примерно в два раза быстрее, чем «тип 1», как в режиме отладки, так и в режиме выпуска. Помните, что это верно только для моего теста — результаты могут быть неверны для других типов процессоров, типов машин, компиляторов или версий .NET.
var sw = System.Diagnostics.Stopwatch.StartNew();
for (int i = 0; i < 10000000; i++)
{
var y = typeof(Program).ToString();
}
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds);
sw.Restart();
for (int i = 0; i < 10000000; i++)
{
var y = typeReference.ToString();
}
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds);
Тем не менее, немного тревожно, что этот вопрос задается без четкого требования. Если вы заметили проблему с производительностью, вы, вероятно, уже профилировали ее и знали, какой вариант был лучше. Это говорит мне о том, что это, скорее всего, преждевременная оптимизация — вы знаете поговорку: «преждевременная оптимизация — корень всех зол».
Программный код измеряется не только производительностью. Это также измеряется правильностью, производительностью разработчика и ремонтопригодностью. Увеличение сложности вашего кода без сильной причины просто переносит эти затраты куда-то еще. То, что могло бы не быть проблемой, теперь превратилось в серьезную потерю производительности, как сейчас, так и для будущих сопровождающих приложения.
Я бы рекомендовал всегда использовать вариант "type1". Код измерения, который я перечислил, не является реальным сценарием. Кэширование typeof в ссылочной переменной, вероятно, имеет массу побочных эффектов, особенно в отношении того, как .NET загружает сборки. Вместо того, чтобы загружать их только при необходимости, это может привести к тому, что они будут загружаться все при каждом использовании приложения, превращая теоретическую оптимизацию производительности в очень реальную проблему производительности.
person
ShadowChaser
schedule
27.05.2013