2011-05-23 79 views
0

這兩種方法都能正常工作,但我想知道他們哪一個「更好」?要麼是最佳實踐,更少發生bug或更快?以下哪個代碼更實用,更可行,更快? C#

方法1:

public static ListViewItem[] GetProcessData() 
    { 
     ManagementClass MgmtClass = new ManagementClass("Win32_Process"); 
     ListViewItem[] ProcessItems = new ListViewItem[MgmtClass.GetInstances().Count - 2]; 
     int i = 0; 

     foreach (ManagementObject Processes in MgmtClass.GetInstances()) 
     { 
      if (!Processes["Name"].ToString().ToLower().Contains("system")) 
      { 
       string[] ProcessInfo = { Processes["Name"].ToString(), Processes["ProcessId"].ToString() }; 
       ProcessItems[i] = new ListViewItem(ProcessInfo); 
       i++; 
      } 
     } 

     return ProcessItems; 
    } 

方法2:

public static ListViewItem[] GetProcessData() 
    { 
     Process[] PInfo = Process.GetProcesses(); 
     ListViewItem[] ProcessItems = new ListViewItem[PInfo.Length - 2]; 
     int j = 0; 

     for (int i = 0; i < PInfo.Length; i++) 
     { 
      if (!PInfo[i].ProcessName.ToLower().Contains("system") & !PInfo[i].ProcessName.ToLower().Contains("idle")) 
      { 
       string[] ProcessInfo = { PInfo[i].MainModule.ModuleName, PInfo[i].Id.ToString() }; 
       ProcessItems[j] = new ListViewItem(ProcessInfo); 
       j++; 
      } 
     } 

     return ProcessItems; 
    } 
+2

您是否嘗試過自己對它們進行基準測試?這似乎是最明顯的做法。 – 2011-05-23 02:17:43

+0

是的,我已經比較了,但是...我只是想要另一個人的意見,如果這讓你煩惱吧! ¬¬ – 2011-05-23 02:21:28

+0

我認爲這是一個合法的問題。是的,您可以在一臺機器上對一個解決方案與另一個解決方案進行基準測試,然後發現它在另一臺機器上完全不同。所以Krähne想知道使用一種方法還是另一種方法是有優勢的。 – 2011-05-23 02:27:48

回答

2

我想使用Process類作爲輸入的方法。在這種情況下容易出現一些問題:

public static ListViewItem[] GetProcessData() 
{ 
    return Process.GetProcesses() 
     .Where(arg => arg.Id != 0 && !arg.ProcessName.ToLower().Contains("system")) 
     .Select(arg => new ListViewItem(new[] { arg.MainModule.ModuleName, arg.Id.ToString() })) 
     .ToArray(); 
} 
+0

哇...你就像個天才! 我已修改,現在完美! 謝謝老兄! – 2011-05-23 02:33:26