Единственный способ узнать - измерить.
Вариант «type1» не является надежным или рекомендовал каким-либо образом, поскольку не все типы могут быть сконструированы. Хуже того, он выделяет память, которая должна быть сборщиком мусора и вызывает конструкторы объектов.
Для оставшихся двух вариантов на моей машине «type3» примерно в два раза быстрее, чем «type1» в обоих режимах отладки и выпуска. Помните, что это справедливо только для моего теста - результаты могут быть неверными для других типов процессоров, типов машин, компиляторов или версий .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 загружает сборки. Вместо того, чтобы загружать их только по мере необходимости, это может привести к загрузке каждого из них при каждом использовании приложения - превращение теоретической оптимизации производительности в очень реальную проблему с производительностью.
Вы получаете экземпляр во время выполнения (динамический, generics?) Или он указан в compiletime? –
@newStackExchangeInstance Я просто спрашиваю в контексте точного кода, который я предоставил. – Dan