0

我为在线游戏创建了 asp.net asmx 服务。当它在生产服务器 asp.net 应用程序上运行时,使用 1.5 - 3 GB 内存。

当我使用 ANTS 内存分析器时,我看到 70% 的应用程序内存是空闲的,而 C# 对象使用 100 - 200Mb。

我如何让 asp.net 将空闲内存返回给操作系统?如果我将在一台服务器上运行几个类似的应用程序,我会出现内存溢出异常。

使用的技术:ASP.Net v4 Windows 2008 C# Small 使用 asp.net cashe 处理硬数据库请求。

4

1 回答 1

1

不幸的是,这是可能的。您可能知道 CLR 在堆中使用 2 种引用对象,标准对象堆和大型对象堆。标准对象堆在垃圾收集器之后进行碎片整理,但大型对象堆没有,因为 CLR 团队认为这会导致性能问题。这就是为什么 LOH 在使用过程中会消耗大量内存的原因。

大于 85000 字节的对象在 LOH 中分配,因此我的建议是分析您的代码以找到可以在 LOH 中分配的对象,并尝试使它们更小。

希望这会有所帮助。顺便说一句,目前还没有 100% 的解决方案,我们都深受其害。

于 2012-11-09T09:56:10.520 回答