Asp.net w3wp正在消耗内存而不将其返回

Asp.net w3wp正在消耗内存而不将其返回,asp.net,memory,w3wp,Asp.net,Memory,W3wp,我在.NET4.6.1中有一个经典的asp.net页面。 它加载4 MB的数据(他们希望它放在一个页面上),无论我如何简化它,IIS工作进程w3wp.exe都会消耗一Gig的数据,并且不会使任何内容过期或返回任何内存。 为什么? 这是密码 using System; using System.Collections.Generic; using System.Web.UI; public partial class _Default : Page { protected void

我在.NET4.6.1中有一个经典的asp.net页面。 它加载4 MB的数据(他们希望它放在一个页面上),无论我如何简化它,IIS工作进程w3wp.exe都会消耗一Gig的数据,并且不会使任何内容过期或返回任何内存。 为什么?


这是密码

using System;
using System.Collections.Generic;
using System.Web.UI;

public partial class _Default : Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if(this.IsPostBack) return;
        ExpandableSelections items = new ExpandableSelections();
        if(items.Count == 0) return;
        this.gvSelectionList.DataSource = items;
        this.gvSelectionList.DataBind();
    }
    protected string GetSerialNumberText(object dataItem)
    {
        SerialNumberData item = (SerialNumberData)dataItem;
        return item.SerialNumber;
    }
}
public class SerialNumberData
{
    public string SerialNumber { get; set; }
    public SerialNumberData(string data) { SerialNumber = data; }
}
public class ExpandableSelections : List<SerialNumberData>
{
    internal ExpandableSelections()
    {   // Emulate database call
        for (int i = 1; i < 72000; i++)
            this.Add(new SerialNumberData("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"));
    }
}
使用系统;
使用System.Collections.Generic;
使用System.Web.UI;
公共部分类\u默认值:第页
{
受保护的无效页面加载(对象发送方、事件参数e)
{
如果(this.IsPostBack)返回;
ExpandableSelections项=新的ExpandableSelections();
如果(items.Count==0)返回;
this.gvSelectionList.DataSource=项目;
这是.gvSelectionList.DataBind();
}
受保护字符串GetSerialNumberText(对象数据项)
{
SerialNumberData项=(SerialNumberData)数据项;
返回item.SerialNumber;
}
}
公共类SerialNumberData
{
公共字符串序列号{get;set;}
public SerialNumberData(字符串数据){SerialNumber=data;}
}
公共类ExpandableSelections:列表
{
内部可扩展选项()
{//模拟数据库调用
对于(int i=1;i<72000;i++)
添加(新序列号数据(“XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX”);
}
}

对Microsoft的调用揭示了在网格本身上调用.Dispose()将使垃圾收集更容易使用,但在本例中,GC线程经常被阻塞(说他们看不到什么--防病毒?),并且,因为我们只需要一个只读的GridView

我发现用一个经典的替换GridView要好得多,在这个调用中,直接用Reponse.write()写出html

这使用的RAM要少得多,并且在后续页面加载时总是会返回它。

可能重复的
using System;
using System.Collections.Generic;
using System.Web.UI;

public partial class _Default : Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if(this.IsPostBack) return;
        ExpandableSelections items = new ExpandableSelections();
        if(items.Count == 0) return;
        this.gvSelectionList.DataSource = items;
        this.gvSelectionList.DataBind();
    }
    protected string GetSerialNumberText(object dataItem)
    {
        SerialNumberData item = (SerialNumberData)dataItem;
        return item.SerialNumber;
    }
}
public class SerialNumberData
{
    public string SerialNumber { get; set; }
    public SerialNumberData(string data) { SerialNumber = data; }
}
public class ExpandableSelections : List<SerialNumberData>
{
    internal ExpandableSelections()
    {   // Emulate database call
        for (int i = 1; i < 72000; i++)
            this.Add(new SerialNumberData("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"));
    }
}