它們幾乎完全相同。這裏耗時的操作是Process.GetProcessesByName("EXCEL")
,p.StartTime
和proc.Kill()
。在這兩種情況下你都做了相同的數量。其他一切只需要很短的時間。如果你想在這裏做一些真正的優化,你可以試用WinAPI來完成那些長時間的操作,有時它的工作速度更快。
編輯: 我測量過這些操作的速度,對於我自己的項目。但我沒有確切的數字,所以我再次檢查。
這是我的結果:
Process.GetProcessesByName():
DateTime start = DateTime.Now;
for (int i = 0 ; i < 1000 ; i++) {
Process.GetProcessesByName("chrome");
}
TimeSpan duration = DateTime.Now - start;
它需要5秒爲opeartions的每1000個。
p.Kill():
TimeSpan duratiom = TimeSpan.Zero;
for (int i = 0 ; i < 1000 ; i++) {
Process p = Process.Start("c:/windows/notepad");
DateTime start = DateTime.Now;
p.Kill();
duratiom += DateTime.Now - start;
}
這需要300毫秒每1000個操作。仍然是一個大數字。
而且開始時間,只是比較數字:
沒有p.StartTime:
Process[] ps = Process.GetProcessesByName("chrome");
DateTime start = DateTime.Now;
for (int i = 0 ; i < 1000 ; i++) {
ps.Where(p => true).ToList();
}
TimeSpan duratiom = DateTime.Now - start;
6毫秒
以P。開始時間:
Process[] ps = Process.GetProcessesByName("chrome");
DateTime start = DateTime.Now;
for (int i = 0 ; i < 1000 ; i++) {
ps.Where(p => p.StartTime < DateTime.Now).ToList();
}
TimeSpan duratiom = DateTime.Now - start;
408毫秒
那麼,這些數字告訴我,有沒有點優化。凡(),ToList()或的foreach。無論如何,Process的操作會花費數十倍的時間。此外,我瞭解剖析器,並使用它們來測量和優化,但我通過這些示例來獲取確切的數字並顯示出這一點。
用診斷名稱空間中的秒錶(假設您是手動指定的)計時。不過,您可以在VS中使用某些工具,這可以讓您分析代碼。 –
但要小心過早的優化。除非您看到重大的性能問題,否則很可能不是問題。 –
[半相關博客文章](http://ericlippert.com/2012/12/17/performance-rant/) - 或許不是第一點,而是關於它是否值得擔心的問題。 –