我正在使用C#编写应用程序。我运行了一些基准测试来尝试加速我的应用程序并遇到一个问题。我有一个循环,需要以单独的间隔多次运行:

Process[] processes = Process.GetProcesses();
foreach (Process process in processes)
    if (process.MainWindowTitle == "Title")
    {
        // Do Stuff
    }


我意识到问题在于,一旦创建数组,访问该数组中的特定元素所花费的时间将大大超过后续访问。

if (processes[0].MainWindowTitle == "Title") { } // ~0.5 ms
if (processes[0].MainWindowTitle == "Title") { } // ~0.0 ms
if (processes[0].MainWindowTitle == "Title") { } // ~0.0 ms
if (processes[0].MainWindowTitle == "Title") { } // ~0.0 ms


这是一个很大的问题。应该花费不到0.1毫秒的时间就是花费50毫秒。为什么会发生这种情况,我该怎么办才能加快速度?

最佳答案

它不是在访问速度较慢的数组,而是在获取MainWindowTitle属性,我相信它是延迟填充的。当您第一次要求它时,它是在做所有OS gubbins来获取值。

要对此进行测试,请尝试:

if (processes[0] != null)


我认为您从一开始就会发现很快。

10-05 23:46