我正在调查已达到最大线程池大小的问题,我找到了以下代码:
public class MonitorApp
{
private static DbContext _dbContext;
public MonitorApp
{
_dbContext = ...;
_start();
}
private void _start()
{
while(true)
{
// Execute queries to detect if number of rows exceeds what we expect
var query = _dbContext.Jobs.Include(j => j.Pages).ThenInclude(p => p.Users); // this is much larger in the real piece of code
if (query.Count() > 10)
{
// do another query etc.
... // email important person to notify
}
Task.Delay(15000); // sleep
}
}
上面的代码使用静态数据库上下文,我知道这是一种不好的做法。但是我们会发出一些查询,我想结果会被清除,但数据库上下文永远不会。
这是否是我们达到最大线程池大小的原因?可能是这个应用程序查询了这么多,它在一天结束时使用了数据库线程池中可用的所有可用线程?此应用程序中只有一个实例在任何给定时间运行。