ASP.NET:大量内存泄漏..它在哪里?D B?UpdatePanel的?没有一次性用品?

Lar*_*ard 0 asp.net memory-leaks updatepanel idisposable linq-to-sql

我一直在开发一个非常大的应用程序,几天前我将它上传到我的服务器.现在我发现它有几个内存泄漏 - 哦哦.我的服务器在1GB内存上运行Windows Server 2008.当我在线有0人时,只使用550-600mb.当一个人上线时,内存开始暴涨,如果3-4人在线,则使用1GB内存.

该应用程序是在ASP.NET中使用AJAX进行的.它有许多每秒运行的更新面板和相当多的javascript.它始终使用5-7个会话.我使用LINQ to SQL作为数据库通信.

我在服务器上尝试过perfmon.exe,我发现:

  • Gen 0系列在几分钟内从0%变为100%
  • Gen 1系列在5分钟内从0%到50%
  • Gen 2在任何时候都非常接近0%
  • 总堆字节速度非常快,达到100%

我还用Visual Studio对我的程序进行了分析.我的总运行时间的8%是在.ToList()方法中完成的,这正是由LINQ to SQL引起的.

我的理论......

(1)Linq to SQL dataContext

这可能是一个疯狂的事情,但是:在我的数据访问层中,我有很多方法:

  • AddSomethingToDatabase();
  • AddSomethingElseToDatabase();
  • DeleteSomethingFromDatabase();

其中每个都有以下初始化:

GameDataContext db = new GameDataContext();
Run Code Online (Sandbox Code Playgroud)

这意味着上述陈述几乎每秒或更长时间.

(2)没有对象实现IDisposable

我必须诚实:我从未使用过IDisposable.据我所知,这可能是个问题.

另外,如果这是泄漏,哪些类应该实现呢?我没有任何I/O工作或其他工作,只有DataContext.

(3)UpdatePanels和jQuery的负载

我有一些担心更新面板可能会给性能带来问题,但我不知道如何检查它.


所以我的问题是:关于内存泄漏可能是什么的任何想法?有关如何查找内存泄漏的任何想法?关于如何解决它的任何想法?

我很想听到有上述情况经验的人的来信!

谢谢,拉尔斯

Ali*_*tad 5

我完全不确定这里有问题.当您尚未确定存在内存泄漏时,所有关于内存泄漏故障排除的建议似乎都是非常糟糕的建议,因为服务器上的内存太低而无法建立.

所以这是我的2美分 - 有些人可能不喜欢它,但只要它可以指向正确的方向,我不介意下注.

您似乎对内存要求非常严格.用于Windows 2008 Server的1GB RAM只能提供足够的RAM来完成与OS相关的工作.这是低于推荐的RAM要求的方式,如果我没有错,最低2 GB RAM.只运行w3wp.exe和IIS的开销大约为200-300 MB.第2代总是大约0%的事实是所有看起来都很好并且你的服务器可能缺乏内存的最好证据.

我的建议是给你的服务器至少2GB的RAM(4GB应该更好),然后监视内存使用情况,看看它是否正在上升.如果是这样,请发布您的调查结果的另一个问题,我们应该能够提供帮助.