2

当涉及到服务器环境的垃圾收集/内存限制时,.Net 框架的行为是否可能有所不同?我在具有 32gbs 物理内存的 64 位服务器计算机上显式运行 x86 编译的应用程序,并且内存不足(SystemOutOfMemoryException),即使只有特定应用程序正在运行并且服务器/所有其他应用程序总共使用 520mb .. 但我无法在我自己的(客户端 win7)机器上重现该行为。

现在我知道应用程序是内存密集型的,但为什么它会在服务器而不是客户端引起问题?

4

2 回答 2

2

.NET 中的 OutOfMemoryException 很少(如果有的话)意味着机器实际上内存不足。 OutOfSomeNecessaryCriticalResource本来是一个不那么容易引起误解的名字。

OutOfMemoryException真的只是意味着无论出现什么问题,程序员都选择在特定情况下抛出该特定异常。例如,简单地调用Image.FromFile(...)损坏的 JPEG(或 .Net 无法打开的任何文件格式)将导致OutOfMemoryException.NET 内存不足,而是因为这是为无效文件引发的记录异常类型(不要问我为什么,因为我不知道)。

要调试您的特定问题,您需要找出抛出的原因OutOfMemoryException(以及何时何地)。AnOutOfMemoryException本身绝对没有任何意义。

于 2010-05-07T15:13:58.920 回答
1

是的,在 Windows 服务器上,您将使用不同类型的垃圾收集器。它更适合服务器风格应用程序的需求,它收集垃圾的积极性较低。<gcServer>您可以使用 app.config 文件中的元素来更改此行为。

顺便说一句,这不太可能是真正的问题,我猜您的应用程序看到了更现实的使用模式。如果可以的话,当你有一个不错的 64 位服务器时,故意强制 x86 模式是你想要避免的。

于 2010-05-07T17:45:23.283 回答