.Net OutOfMemory на сервере, но не на рабочем столе - PullRequest
2 голосов
/ 07 мая 2010

Возможно ли, что платформа .Net ведет себя по-разному, когда речь идет об ограничении сбора мусора / памяти в серверных средах? Я запускаю явно скомпилированные x86 приложения на 64-битной серверной машине с 32 ГБ физической памяти и у меня заканчивается память (SystemOutOfMemoryException), хотя ничего кроме этого конкретного приложения не запущено, а сервер / все другие приложения используют 520 МБ всего ... но я не могу воспроизвести это поведение на моей собственной машине (клиент win7).

Теперь я знаю, что приложение занимает много памяти, но почему оно вызывает проблемы на сервере, а не на клиенте?

Ответы [ 2 ]

2 голосов
/ 07 мая 2010

OutOfMemoryException в .NET редко (если вообще когда-либо) означает, что на машине буквально недостаточно памяти. OutOfSomeNecessaryCriticalResource было бы Менее вводящее в заблуждение имя.

OutOfMemoryException на самом деле просто означает, что, если что-то идет не так, программист решил выбросить это конкретное исключение в этой конкретной ситуации. Например, простой вызов Image.FromFile(...) для поврежденного JPEG (или любого формата файла, который .Net не может открыть) приведет к OutOfMemoryException не потому, что в .NET не хватает памяти, а потому, что это документированный тип исключения выброшен за неверный файл (не спрашивайте меня почему, потому что я не знаю).

Чтобы отладить вашу конкретную проблему, вам нужно выяснить, что выбрасывает OutOfMemoryException (и где и когда). Сам по себе OutOfMemoryException абсолютно ничего не значит.

1 голос
/ 07 мая 2010

Да, на сервере Windows вы будете использовать другой тип сборщика мусора. Он более приспособлен к потребностям приложения в стиле сервера, он собирает мусор менее агрессивно. Вы можете изменить это поведение с помощью файла app.config, используя элемент <gcServer> .

Кстати, вряд ли это будет настоящей проблемой, я думаю, что ваше приложение видит более реалистичный шаблон использования. Намеренно форсировать режим x86, когда у вас есть хороший 64-битный сервер, вам следует избегать, если можете.

...