首次索引数组太慢了

时间:2011-08-03 12:22:22

标签: c# .net wpf .net-4.0

我正在使用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.1ms的东西需要50ms。为什么会发生这种情况,我能做些什么来加快速度呢?

1 个答案:

答案 0 :(得分:9)

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

要测试此功能,请尝试:

if (processes[0] != null)

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