C# Web应用程序使用太多内存
在我的主机公司,我有两个大致相同的.net应用程序。这两个应用程序使用相同的池,最大内存为300 mb 我可以刷新其中一个应用程序的startpage大约10次,然后出现内存不足异常,池崩溃 在我的应用程序中,我打印出以下内存值:C# Web应用程序使用太多内存,c#,asp.net,memory,memory-management,C#,Asp.net,Memory,Memory Management,在我的主机公司,我有两个大致相同的.net应用程序。这两个应用程序使用相同的池,最大内存为300 mb 我可以刷新其中一个应用程序的startpage大约10次,然后出现内存不足异常,池崩溃 在我的应用程序中,我打印出以下内存值: 私有内存64:197804.00KB(193.00MB) PeakPagedMemorySize64:247220.00KB(241.00MB) 虚拟内存64:27327128.00KB(26686.00MB) PagedMemorySize64:197804.00K
私有内存64:197804.00KB(193.00MB)
PeakPagedMemorySize64:247220.00KB(241.00MB)
虚拟内存64:27327128.00KB(26686.00MB)
PagedMemorySize64:197804.00KB(193.00MB)
PagedSystemMemorySize64:415.00KB(0.00MB)
PeakWorkingSet64:109196.00KB(106.00MB)
工作集64:61 196.00 kb(59.00 mb)
GC.GetTotalMemory(true):2960.00KB(2.00MB)
GC.GetTotalMemory(false):2968.00KB(2.00MB) 我已经读了,读了,看了很多关于内存分析的视频,但是我在分析我的应用程序时没有发现任何问题。 我使用ANTS Memory profiler 8,在构建后刷新startpage一次时得到以下结果: 当我查看摘要时,.NET正在使用分配给应用程序的135.8 MB总专用字节中的41.65 MB。 每次刷新时,该值都会越来越大。这正常吗?当我刷新8次时,我得到以下结果: .NET正在使用为应用程序分配的153 MB总专用字节中的56.11 MB
我应该从哪里开始?使用这么多内存会有什么问题?内存不足300 mb吗?这无疑是由于代码中存在内存泄漏,可能是因为没有处理/关闭与队列或数据库之类的连接。撇开评测不谈,检查您的代码并确保您正在关闭/处理所有适当的资源:然后您的问题应该会自行缓解。有一些数据库连接未被处理。然后我有一个类删除ETag,如下所示:
public class CustomHeaderModule : IHttpModule
{
public void Dispose() { }
public void Init(HttpApplication context)
{
context.PreSendRequestHeaders += OnPreSendRequestHeaders;
}
void OnPreSendRequestHeaders(object sender, EventArgs e)
{
HttpContext.Current.Response.Headers.Remove("ETag");
}
}'
我必须删除在Init函数中添加的新事件吗?或者GC会解决这个问题吗
我有很多这样的想法:
Task.Factory.StartNew(() =>
{
Add(...);
});
但我不会在代码中处理它们。GC会解决这个问题吗?还是我应该用另一种方式解决呢?这完全取决于您的代码在做什么。确保您正在对所有内容调用
Dispose
。如果您有数据库连接,请确保关闭Dispose
链中的连接。