首次索引数组太慢了

Dav*_*ave 2 .net c# wpf .net-4.0

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

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

我意识到问题是,只要我创建数组,访问该数组的特定元素所需的时间比后续访问要长得多.

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
Run Code Online (Sandbox Code Playgroud)

这是一个非常重要的问题.应该花费少于0.1ms的东西需要50ms.为什么会发生这种情况?我能做些什么来加快速度?

Jon*_*eet 9

它不是访问缓慢的数组 - 它正在获取该MainWindowTitle属性,我认为这是一个懒惰的人口.当你第一次要求它时,它正在执行所有OS gubbins来获取值.

要测试这个,请尝试:

if (processes[0] != null)
Run Code Online (Sandbox Code Playgroud)

我认为你会发现从一开始就非常快.