我为在线游戏创建asp.net asmx服务。当它在生产服务器上运行时,asp.net应用程序使用1.5 - 3 GB的内存。
当我使用ANTS内存分析器时,我看到70%的应用程序内存是免费的,C#对象使用100 - 200Mb。
我如何让asp.net向OS返回空闲内存?如果我将在一台服务器上运行几个类似的应用程序,我将获得内存异常。
二手技术: ASP.Net v4 Windows 2008 C# 用于硬数据库请求的小型asp.net cashe。
答案 0 :(得分:1)
不幸的是,这是可能的。您可能知道CLR在堆中使用了两种引用对象,标准对象和大对象堆。标准对象堆在垃圾收集器之后进行碎片整理,但是大型垃圾收集器不会,因为CLR团队认为它会导致性能问题。这就是LOH在使用过程中消耗大量内存的原因。
大于> 85000字节的对象在LOH中分配,所以我的建议是分析你的代码以找到可以在LOH中分配的对象,并尝试使它们变小。
希望这会有所帮助。 BTW目前没有100%的解决方案,我们都受此影响。