c# - 如何知道线程是否被垃圾收集阻塞

标签 c# garbage-collection .net-3.5 session-timeout

我有一个客户端-服务器应用程序,后端有 SQL Server。

我正在运行一些资源密集型任务(大约需要 30 小时才能完成)。用户有 3 分钟的 session 时间。每 2 分钟我就有一个单独的线程更新 session 。

但是,有时线程会暂停,因为垃圾收集器会激活并阻塞线程。因此,当线程唤醒时 session 已经过期,所以我无法完成我的任务。

我正在为我的进程使用 Workstation Concurrent 设置。

对解决这个问题有什么建议吗?

在一项测试中,我将 .NET 计时器设置为在我的任务期间每 2 分钟调用一次回调。但是,我逐渐发现计时器会在 2 分 1 秒、2 分 2 秒时触发,有时还会延迟一分钟以上。

最佳答案

如果您愿意切换到服务器 GC(从讨论来看这看起来是一个可行的选项),您可以使用 GC 通知 API:

http://msdn.microsoft.com/en-us/library/system.gc.waitforfullgcapproach.aspx

然后,您将能够在完整 GC 开始之前收到通知 - 这会导致暂停。

关于c# - 如何知道线程是否被垃圾收集阻塞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26918381/

相关文章:

c# - 检查字符串列表是否包含任何枚举字符串值

c# - C 和 C# 实现之间的 AES/CBC 加密差异

c# - 为什么这个具有类型约束的通用方法无法编译?

c# - 数据模板内的 UWP 网格

java - 优化 GC 运行时间

c# - 如何使用 FTP 在目录之间移动文件?

c# - ASP.NET MVC 中的异步错误 Controller

java - 避免内存泄漏的好方法

java - Java 的垃圾优先 (G1) 垃圾收集器的相对性能?

.net - 为此使用反射,还有其他方法吗?