2011-05-23 77 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