Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Web应用程序使用太多内存_C#_Asp.net_Memory_Memory Management - Fatal编程技术网

C# Web应用程序使用太多内存

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

在我的主机公司,我有两个大致相同的.net应用程序。这两个应用程序使用相同的池,最大内存为300 mb

我可以刷新其中一个应用程序的startpage大约10次,然后出现内存不足异常,池崩溃

在我的应用程序中,我打印出以下内存值:
私有内存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
链中的连接。