我们的IIS 6.0应用程序池占用了一页155Mb内存的第一个负载。在随后刷新同一页面时,所消耗的应用程序池内存达到约245Mb。为什么我们的IIS 6应用程序池占用CLR消耗的内存的十倍
它是一个webforms应用程序,并使用实体框架和DevExpress控件。
起初我以为这是一个内存泄漏,但在使用内存分析器进一步调查发现,在采取一半的空间了由应用程序池是自由空间,但支离破碎。
这指出了手指朝向大对象堆内存碎片的罪魁祸首。确实有大约980Kb的长列表,通常会导致碎片化,特别是当列表增长并调整大小时留下内存空洞。
所以我创建了一个复合列表,基本上是一个列表列表,这个想法是,每个列表将在85000字节以下,它将被分配在垃圾收集后被压缩的普通堆中(不像Large对象堆,从来没有得到压缩)
本来料想的复合列表做的伎俩在别处读取,其他人已经使用列表清单,以确保对象转义大对象堆,但它似乎没有做任何在这种情况下真正的区别在于,应用程序池内存仍然在240Mb左右,而内存分析器报告的净点CLR内存在10Mb左右。做内存转储
我打算看看怎么回事,只是想知道,如果其他人有什么可能是可能的原因的视图。