我是C#的初学者,我正在尝试理解在不同范围内声明变量的效果。是否存在明显的性能差异:
示例1
class A
{
static int i;
static string temp;
}
class B
{
while(true)
{
A.i=10;
A.temp="Hello";
}
}
示例2
class B
{
int i;
string temp;
while(true)
{
i=10;
temp="Hello";
}
}
示例3
class A
{
public int i;
public string temp;
}
class B
{
A D = new A();
while(true)
{
D.i=10;
D.temp="Hello";
}
}
答案 0 :(得分:3)
第一个代码片段共享两个变量:它们是静态分配的,所有线程都会在并发环境中使用它们。这非常糟糕 - 应该避免在生产代码中出现类似情况。
第二个和第三个代码片段是线程安全的。第三个代码段对变量i
和temp
进行分组;第二个片段没有。另外,第三个片段需要额外分配一个对象,并在返回时创建一个要收集的对象(当然它因为无限while (true)
循环而永远不会返回,所以它并不重要)。
如果两个变量在逻辑上不属于同一个,则应避免为它们创建类。如果它们属于一起,则应将使用这些变量的代码移动到声明它们的类中。
就性能和内存含义而言,第三个片段与第二个片段相比需要额外的一块内存,但它太小而无法注意。几乎不可能检测到性能差异,因此您不必过于担心:在大多数情况下,最好优化代码以提高可读性。