Будет ли GAC исправить исключение ASP.NET/IIS6.0 System.OutOfMemoryException? - PullRequest
2 голосов
/ 27 октября 2008

У меня много экземпляров приложения, установленного на IIS 6.0, Windows Server 2003, в том же пуле приложений. Они имеют много одинаковых сборок и не могут быть объединены в одно приложение.

Недавно я добавил новый экземпляр приложения и получил исключение System.OutOfMemoryException при попытке загрузить приложение ASP.NET 2.0.

Исправит ли эту ошибку использование GAC для хранения общих сборок или это можно исправить только путем размещения сайтов между различными пулами приложений?

Ответы [ 4 ]

1 голос
/ 03 ноября 2008

Убедитесь, что в Machine.Config установлен параметр retail retail "= true":

<system.web>
    <!--
        <deployment
            retail = "false" [true|false]
        />
    --> 
   <deployment retail="true" />
</system.web>

Отладочный код занимает намного больше памяти, чем не отладочный, и компиляция в отдельные сборки, а не по одной на страницу, уменьшит накладные расходы памяти при загрузке сборки.

Убедитесь, что параметры памяти в пулах приложений установлены достаточно высоко, и вы также можете взглянуть на параметр ProcessModel MemoryLimit: http://msdn.microsoft.com/en-us/library/7w2sway1(VS.71).aspx

И попробуйте использовать настройку 80% или 85%:

<processModel 
  memoryLimit="80"
/>
1 голос
/ 27 октября 2008

Помещение чего-либо в GAC только меняет физическое местоположение DLL (и настройки безопасности), но не меняет то, что загружено в память.

Большинство людей склонны думать о GAC как о том, «где Microsoft размещает свои вещи». Я не видел много приложений, созданных «всеми остальными», которые могли бы оправдать использование GAC.

Вероятно, вам следует подумать о решении для балансировки нагрузки, когда вы слишком сильно нагружаете ОЗУ своей машиной.

0 голосов
/ 22 ноября 2008

На каком типе запроса это произошло? Возможно, вы захотите прочитать об этой распространенной причине OutOfMemoryExceptions .

0 голосов
/ 22 ноября 2008

Размещение общей сборки в GAC экономит место на диске, например. Если у вас есть 20 приложений ASP, которые используют одну и ту же DLL. Возможно, вы загружаете меньше копий одной и той же библиотеки в память, я не уверен. Тем не менее, OutOfMemoryErrors чаще всего вызывается загрузкой в ​​память чрезвычайно больших объектов, типичным примером является DataSet. Сборки малы по сравнению с памятью, которую вы можете использовать с большими наборами данных или большими XML-файлами в памяти.

...