C# 在哪里声明和初始化变量以提高性能和可读性?

问题描述 投票:0回答:0

初级程序员在这里。

最近我注意到我的程序确实使用了过多的内存,正如 Visual Studio 所报告的那样。图片供参考:Way too much memory

我确定问题出在一个循环中,每个循环都会创建一个巨大的 bool 数组的新实例。我从这个(简化)更改了代码:

for (int i = 0; i < TotalLoops; i++)
{
    bool[,] BigBoolArray = new bool[x,y];
    // Do stuff
}

对此:

bool[,] BigBoolArray = new bool[x,y];
for (int i = 0; i < TotalLoops; i++)
{
    Array.Clear(BigBoolArray, 0, BigBoolArray.Length);
    // Do stuff
}

这减少了内存使用一直到这个:Much Better

问题解决了吧?有点……

有了这个发现,我的强迫症发作了,我仔细检查并删除了在循环中找到的“new”关键字的每个实例。结果发生了两件事:
1. 我的代码变得可读性差了很多。更糟糕的是,我一定是在进行所有这些更改的过程中搞砸了,因为它会吐出一些非常奇怪的结果。
2. 我在方法之外声明了一些变量(即在单击表单上的按钮时运行的代码块之外),这似乎使程序变慢了。 (也许它们被存储在堆上而不是堆栈上?)

那么这里正确的方法是什么?考虑到性能和可读性,我应该在哪里声明和初始化变量?在某些情况下,我是否应该只接受增加的内存使用量,并且只在极端情况下(例如我的大型 bool 数组)在循环外初始化?它与变量的类型有关吗? (除了 bool 数组,我还使用了很多哈希集,以防万一。)

c# initialization variable-declaration
© www.soinside.com 2019 - 2024. All rights reserved.