我正在使用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。为什么会发生这种情况,我能做些什么来加快速度呢?
答案 0 :(得分:9)
它没有访问缓慢的数组 - 它正在获取MainWindowTitle
属性,我认为这是一个懒惰的填充。当你第一次要求它时,它正在执行所有OS gubbins来获取值。
要测试此功能,请尝试:
if (processes[0] != null)
我认为你会发现从一开始就非常快。