[英]What is the best, more practical way to write such an entry with nested dictionaries? Which design pattern to use? C#
[英]Which of the following codes would be more practical, feasible, and fast? 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;
}
我會使用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();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.