【发布时间】:2009-12-08 20:50:59
【问题描述】:
有谁知道用于对 Windows 2003 服务器的内存进行碎片整理的 dll 吗?
这是背景: 我们有一个 .net 电子商务网站,它使用预制框架完成大部分繁重工作。在将对象添加到缓存时尝试分配内存时,网站偶尔会出现内存不足的异常。它主要发生在框架尝试将大型数据集添加到缓存时。
我了解当您尝试向缓存添加内容时,它需要使用连续内存来添加对象,如果找不到足够大的内存块,您将收到内存不足异常。
当 IIS 已经消耗 600MB 以上的内存并且需要多出 10 或 20MB 时,服务器经常会遇到这个问题。服务器有 4GB 的内存,所以 IIS 应该能够使用 2GB,但我认为是这些大对象有问题找到合适的地方。所以我的 hacky 解决方法是尝试捕获异常,运行快速 RAM 碎片整理,然后继续。
我知道最好使用更小的对象,但我真的不想对框架进行逆向工程来替换部分缓存代码。
干杯, 兰斯
【问题讨论】:
-
还有什么其他程序在后台运行?
-
我不确定您的假设是否正确。我记得它的方式,你看到的内存是由 4K 块组装而成的,所以它不需要在操作系统级别是连续的。在局部治疗水平上,它很可能需要,但这完全是另一回事。
-
我在过去的项目中遇到过类似的问题,这与背景中的内容几乎无关。从 MS 工程师告诉我的情况来看,这更多是 .net 中的问题,而不是 Windows 中的问题。释放后台操作会有所帮助,但作用很小。我们的回答是对内存使用更加小心,但这听起来不适合您。它也是一个 winform 应用程序,所以我们不必担心 24x7 的操作。我知道这没什么帮助,但希望至少能过滤掉你会得到的一些回复。