我在后端有一个带有SQL服务器的客户端 - 服务器应用程序。
我正在运行一些资源密集型任务(大约需要30个小时才能完成)。用户有3分钟的会话时间。我每隔2分钟就会有一个单独的主题更新会话。
但是,偶尔会暂停线程,因为垃圾收集器会激活并阻塞线程。因为当线程被唤醒时,会话已经过期,所以我无法完成任务。
我正在为我的流程使用Workstation Concurrent设置。
有关解决此问题的任何建议吗?
在一个测试中,我有一个.NET计时器设置为在我的任务期间每2分钟调用一次回调。但是,我逐渐看到计时器在2分1秒,2分2秒内发射,有时会有超过一分钟的延迟。
答案 0 :(得分:1)
如果您愿意切换到服务器GC(从讨论中看起来像一个可行的选项),您可以使用GC通知API:
http://msdn.microsoft.com/en-us/library/system.gc.waitforfullgcapproach.aspx
然后,您将能够在GC完全启动之前收到通知 - 这会导致暂停。
答案 1 :(得分:0)
您可以使用延迟模式设置告诉垃圾收集器在关键操作期间不运行。
http://www.infoq.com/news/2012/03/Net-403
http://msdn.microsoft.com/en-us/library/bb384202(v=vs.110).aspx