Sql server 使用Linq to SQL时SQL Server内存泄漏
我正在使用以下模式使用Linq to SQL更新我的SQL Server记录:Sql server 使用Linq to SQL时SQL Server内存泄漏,sql-server,linq-to-sql,memory-leaks,Sql Server,Linq To Sql,Memory Leaks,我正在使用以下模式使用Linq to SQL更新我的SQL Server记录: List<int> allIds; using (MyDataContext dc= new MyDataContext()) { dc.CommandTimeout = 0; allIds = dc.MyTables.Select(x => x.Id).ToList(); } Parallel.ForEach(allIds
List<int> allIds;
using (MyDataContext dc= new MyDataContext())
{
dc.CommandTimeout = 0;
allIds = dc.MyTables.Select(x => x.Id).ToList();
}
Parallel.ForEach(allIds, x => ComputeAndSave(x));
我在应用程序的多个部分中使用相同的模式来更新某些表中的所有行。在所有这些情况下,SQL Server使用的内存都在缓慢地增加。我发现释放所有内存的唯一方法是停止并重新启动SQL Server服务。为什么这里有内存泄漏,如何修复
非常感谢 SQL Server应该占用所有可用内存。它应该在无头服务器上运行
在SSMS中,打开服务器属性并设置合理的最大服务器内存量。SQL server应该占用所有可用内存。它应该在无头服务器上运行
在SSMS中,打开服务器属性并设置合理的最大服务器内存。SQl server设计为使用服务器上的所有可用内存,这就是为什么它不应与其他任何服务器位于同一服务器上的原因。也就是说,您可以限制SQl Server使用的内存量。请管理员这样做,看看它是否解决了您的问题。SQl Server的设计目的是使用服务器上的所有可用内存,这就是为什么它不应与其他服务器位于同一服务器上的原因。也就是说,您可以限制SQl Server使用的内存量。请管理员这样做,看看它是否能解决您的问题。谢谢,但在无头服务器上运行与内存使用无关。我还意识到,这种内存膨胀只有在数据库处于完全恢复模式时才会发生。@user277498,关于“headless”:我的意思是,当该框上没有其他内容时,可以获取所有内存。无论如何,我不认为在完全恢复模式下运行会导致内存泄漏。您是否设置了最大内存值?结果怎么样?谢谢!你的建议奏效了。因此,我将此标记为答案。但是,SQL Server不释放不再使用的内存在我看来仍然像是内存泄漏。这可能是出于设计,但它仍然困扰着我。谢谢,但在无头服务器上运行与内存使用无关。我还意识到,这种内存膨胀只有在数据库处于完全恢复模式时才会发生。@user277498,关于“headless”:我的意思是,当该框上没有其他内容时,可以获取所有内存。无论如何,我不认为在完全恢复模式下运行会导致内存泄漏。您是否设置了最大内存值?结果怎么样?谢谢!你的建议奏效了。因此,我将此标记为答案。但是,SQL Server不释放不再使用的内存在我看来仍然像是内存泄漏。这可能是故意的,但它仍然困扰着我。
ComputeAndSave(int x, MyDataContext dc)
{
var myRecord= dc.MyTables.Select(x => x).Where(x => x.Id == id).FirstOrDefault();
myRecord.Total = myRecord.Total + 1; //some modification(s)
dc.SubmitChanges();
}