【发布时间】:2015-06-22 13:58:59
【问题描述】:
我在启动 Windows 服务时遇到了一些性能问题,我的第一轮 lstSps 很长(大约 130 个存储过程)。有没有办法加快速度(除了加快存储过程)?
当 foreach 结束并进入第二轮时,它会更快,因为在 TimeToRun() 上返回 true 的人并不多。但是,我担心的是第一次有更多的存储过程要运行。
虽然我读到它更快,所以我有关于制作一个数组和一个 for 循环的想法,但我认为问题在于这些过程需要很长时间。我可以以更好的方式构建它吗?也许使用多个线程(每个执行一个)或类似的东西?
非常感谢一些提示:)
编辑:澄清一下,它的方法 HasResult() 正在执行 SP:s 并且看起来需要时间..
lock (lstSpsToSend)
{
lock (lstSps)
{
foreach (var sp in lstSps.Where(sp => sp .TimeToRun()).Where(sp => sp.HasResult()))
{
lstSpsToSend.Add(sp);
}
}
}
while (lstSpsToSend.Count > 0)
{
//Take the first watchdog in list and then remove it
Sp sp;
lock (lstSpsToSend)
{
sp = lstSpsToSend[0];
lstSpsToSend.RemoveAt(0);
}
try
{
//Send the results
}
catch (Exception e)
{
Thread.Sleep(30000);
}
}
【问题讨论】:
-
只要您没有对其进行分析,我们就无法真正帮助您...
-
我想要的帮助不是加快所有存储过程,而是找到一种更好的方法来执行它们,所以我没有做 1. 执行所有存储过程(等到全部完成) 2.开始处理结果
标签: c# multithreading performance loops