GAC是否会修复ASP.NET / IIS6.0 System.OutOfMemoryException?

时间:2008-10-27 20:01:08

标签: asp.net exception .net-2.0 iis-6 out-of-memory

我在同一应用程序池下的IIS 6.0,Windows Server 2003框中安装了许多应用程序实例。它们共享许多相同的程序集,无法加入单个应用程序。

我最近添加了一个新的应用程序实例,并在我尝试加载ASP.NET 2.0应用程序时获得了System.OutOfMemoryException。

使用GAC存储公共程序集是否会修复此错误,或者只能通过在不同应用程序池之间隔开站点来解决此问题?

4 个答案:

答案 0 :(得分:1)

在GAC中放置内容只会更改DLL的物理位置(和安全设置),但不会更改加载到内存中的内容。

大多数人倾向于将GAC视为“微软放置他们的东西”。我没有看到很多应用程序创建的“其他人”可以证明使用GAC是合理的。

您应该开始考虑一种负载平衡解决方案,即您在计算机上施加了大量RAM压力。

答案 1 :(得分:1)

确保在Machine.Config中设置部署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"
/>

答案 2 :(得分:0)

将共享程序集放入GAC可节省驱动器空间,例如。如果你有20个asp应用程序使用相同的DLL。可能是你将更少的相同dll拷贝加载到内存中的情况,我不确定。也就是说,OutOfMemoryErrors更可能是由于将非常大的obejects加载到内存中引起的,典型的例子是DataSet。与内存中大型数据集或大型xml文件可以占用的内存相比,程序集很小。

答案 3 :(得分:0)

这种情况发生了什么类型的请求? 您可能需要阅读about this common cause of OutOfMemoryExceptions