我正在使用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)
我认为您从一开始就会发现很快。