0
. NET 4.6.1에서 고전적인 asp.net 페이지가 있습니다. 4MB의 데이터를로드합니다 (한 페이지에 넣기를 원함). IIS Worker Process w3wp.exe는 단순화하든 관계없이 데이터 기가비트를 사용하며 아무 것도 기한이 만료되거나 메모리가 다시 제공되지 않습니다. 왜?w3wp 메모리를 다 먹어 다시 돌려주지 않음
<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<asp:Content ID="BodyContent" ContentPlaceHolderID="MainContent" runat="server">
<asp:GridView ID="gvSelectionList" runat="server" AutoGenerateColumns="false" CssClass="LPSCriteriaSelection" EnableViewState="False">
<Columns>
<asp:TemplateField HeaderText="SerialNumber">
<ItemTemplate>
<asp:HyperLink ID="hlSerialNumber" Text='<%#GetSerialNumberText(Container.DataItem)%>' />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</asp:Content>
여기 자체가 가비지 컬렉션에 더 쉽게 사용할 수 있도록합니다 그리드에 .Dispose()를 호출 마이크로 소프트에 대한 호출이 밝혀 코드
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"));
}
}
가능한 복제본 [w3wp 응용 프로그램 풀 IIS 7에서의 높은 메모리 사용량] (http://stackoverflow.com/questions/9666356/high-memory-usage-with-w3wp-application-pool-iis-7) – CodeCaster