首页 > 解决方案 > 仅在某些情况下 LINQ 语句的 OutOfMemory 异常

问题描述

我管理一个网站,其博客部分由 ASP.NET MVC 架构和存储在 SQL Server 数据库中的文章组成。如果抛出任何异常,它会向我发送电子邮件。每隔几周,我就会在深夜(通常在 40 到 150 之间)收到一系列电子邮件,其中包含这行代码引发的相同 System.OutOfMemory 异常:

var resultsDb = db.Articles
    .Where(x => x.CreatedDate <= DateTime.Now 
                && x.ArticleTypeID == TypeID 
                && x.IsActive == true)
    .OrderByDescending(x => x.CreatedDate)
    .ToList();

现在经过一些研究,我了解到一次查询所有文章是不好的做法,并且可能导致此错误(数据库中目前有约 200 篇文章)。但是,我无法解释这种情况有一些奇怪的事情:

  1. 无论我做什么,我都无法手动重现异常。这很慢,但查询总是在 localhost 中成功完成,包括生产和开发文章数据库。此外,无论我在实时站点上做什么,我都不会收到指示错误的电子邮件。
  2. 例外的时间安排:总是以相对较大的批次分散在每分钟 1-2 次例外的时间段内。总是在深夜。每两周只偶尔住一晚。

我很好奇是什么导致了这些事件。是安全威胁吗?数据库出了什么问题?

谢谢!

标签: c#sql-serverlinqexceptionout-of-memory

解决方案


推荐阅读