【发布时间】:2014-10-16 01:55:03
【问题描述】:
通过我昨天发布的一个问题,很明显,在循环外部声明一个变量并在内部实例化它与简单地将声明移动到循环内部相比没有性能优势,因此声明和实例化是同时完成的.但是实例化呢?请考虑以下两个选项。
//OPTION 1:
while (_doWork)
{
Person p = new Person(name = "John", age = 35);
//work that involves reading (not writing to) p
}
//OPTION 2:
Person p = new Person(name = "John", age = 35);
while (_doWork)
{
//work that involves reading (not writing to) p
}
就本问题而言,关键假设如下:
- p 在循环之外不需要
- p 也没有写出来(所以结果明智,两者是一样的)
- 我们没有理由继续重新实例化 p(p 在两个选项中看起来都一样)
问题:哪个性能更好,哪个选项更好?
这篇文章的答案(尽管是关于声明,而不是实例化)似乎表明后者:Declaring variables inside or outside of a loop
我的想法:
- 对我来说,继续重新实例化它似乎是一种重大浪费。对于原始类型可能没问题,但对于复杂类?
- int a = 0 和 int a = new int() 一样,所以我猜上面的答案也适用于原始类型?
【问题讨论】:
-
这完全取决于你想做什么。
-
除了重复之外,这个问题似乎主要是基于意见的,并且可能是 2014 o.O 代码审查的候选对象
-
嗯,
int的分配速度非常快(无论如何它只是在堆栈上保留位置 + 初始化)。对于引用类型,主要取决于您的代码预期它是相同的实例还是不同的实例。 -
它不会在每个循环中恢复...它被编译为相同的 IL,因此在速度方面没有差异...这留下了可读性。
标签: c# .net performance instantiation