如何在长时间ASP.NET计算期间避免应用程序池终止?

时间:2011-06-09 18:20:49

标签: asp.net multithreading cpu

我的托管服务提供商给了我50%的cpu限制。我正在尝试使用DotNetZip备份我的DNN门户文件 - 超过16000个600Mb磁盘空间文件的集合。我正在使用压缩优先级最低的单独线程。如果处理器已经足够加载,那么我的线程工作正常,但是当处理器或多或少可用时,我很快就会增加CPU限制(50%),最后池终止并需要回收。

所以我需要知道如何减慢线程速度以免超出cpu限制。

感谢。

3 个答案:

答案 0 :(得分:1)

如果您只想将线程保持在50%以下,请在整个代码中撒上Thread.Sleep(x)。你需要弄清楚你需要多少这些,以及毫秒延迟应该是什么 - 只有当你编写了需要Sleep()调用的代码时... ...

那就是说,你的情况听起来很奇怪。应该有更好的方法来进行备份。

答案 1 :(得分:0)

最简单的方法可能是定期抛出一个Sleep,并指定足够的时间,以便线程不能,即使没有其他任何东西可以运行,它也只使用一个核心的一半。

答案 2 :(得分:0)

workerThread.Suspend ()
Thread.Sleep (500);
workerThread.Resume ();

但请注意。注意,如果工作线程在暂停时处于关键部分,则可能导致死锁或意外减速。欲获得更多信息: MSDN System.Threading.Thread.Suspend