2017-01-18 1 views
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")); 
    } 
} 
+0

가능한 복제본 [w3wp 응용 프로그램 풀 IIS 7에서의 높은 메모리 사용량] (http://stackoverflow.com/questions/9666356/high-memory-usage-with-w3wp-application-pool-iis-7) – CodeCaster

답변

0

하지만이 예제에서는 GC 스레드가 종종 있었다 우리는 단지 읽기 전용 GridView 만 필요했기 때문에 단지 GridView를 기존의 < % FunctionCall()으로 대체하는 것이 훨씬 더 나은 것으로 나타났습니다. ; %> 그리고이 호출은 직접 Reponse.Write()으로 html로 작성하십시오.

이것은 보다 적은 RAM을 사용했으며 이후의 페이지로드시 항상 반환했습니다.

관련 문제