C#中的list.Add()方法问题

JMDSunny_ 2016-04-04 07:47:35
int i=0,m=0;
for (int j = 0; j <= Process.GetProcesses().Count(); j++)
{
try
{

Process process = Process.GetProcesses().ElementAt(j);
i++;
list.Add(new ProcessInf(process.Id, process.ProcessName, process.TotalProcessorTime.TotalMilliseconds, process.WorkingSet64, process.MainModule.FileName));
m++;
}
catch { }
}

为什么这段代码执行之后,i的值和m的值不一样呢?
求大神解释
...全文
566 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
john_QQ:2335298917 2016-04-05
  • 打赏
  • 举报
回复
对,应该先将获得的进程信息存到一个变量里,而不是每个for循环都去获得一次count,另外,你的list.add可能发生了异常,导致m++没有执行。你可以在catch块中捕获异常并输出,就明白了
枫0子K 2016-04-05
  • 打赏
  • 举报
回复
总结这段代码的问题与回答楼主的问题: 1. 代码不严谨,应该先缓存Process.GetProcesses()的值 一个是影响性能问题(for的每轮都要获取一次),另一个每次获取的集合可能不一样,那万一for的时候Count是10,而ElementAt的时候集合只有9个了,这时候拿最后 一个是不是就有问题。出这个Bug的时候你连调试都没办法找到问题的吧? 2. i++与m++成功执行后肯定是会一样的,但楼主代码中,i++与m++中间还有段list.add代码(出问题的地方),并且有try-catch语句(不处理异常),所以执行最后看起来是没有异常,但是i与m的值不相同。
denshanzhe 2016-04-05
  • 打赏
  • 举报
回复
不一样,只能说, list.Add 这一行出现异常了。
JMDSunny_ 2016-04-05
  • 打赏
  • 举报
回复
引用 8 楼 johnliuyuan 的回复:
对,应该先将获得的进程信息存到一个变量里,而不是每个for循环都去获得一次count,另外,你的list.add可能发生了异常,导致m++没有执行。你可以在catch块中捕获异常并输出,就明白了
谢谢
threenewbee 2016-04-04
  • 打赏
  • 举报
回复
那就是 list.Add(new ProcessInf这一行有丢出异常
JMDSunny_ 2016-04-04
  • 打赏
  • 举报
回复
引用 3 楼 shingoscar 的回复:
贴的代码就是错的,还有什么好说?
运行之后没有错误 就是显示出的进程比系统实际的少了很多
Poopaye 2016-04-04
  • 打赏
  • 举报
回复
贴的代码就是错的,还有什么好说?
JMDSunny_ 2016-04-04
  • 打赏
  • 举报
回复
引用 1 楼 nry19871012 的回复:
你是怎么查看的i和m, i++,m++需要执行完这一行才能自加。
我执行完之后加了输出语句查看 int i = 0, m = 0; for (int j = 0; j <= Process.GetProcesses().Count(); j++) { try { Process process = Process.GetProcesses().ElementAt(j); i++; list.Add(new ProcessInf(process.Id, process.ProcessName, process.TotalProcessorTime.TotalMilliseconds, process.WorkingSet64, process.MainModule.FileName)); m++; } catch { } } MessageBox.Show(m.ToString());
nry19871012 2016-04-04
  • 打赏
  • 举报
回复
你是怎么查看的i和m, i++,m++需要执行完这一行才能自加。

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧