title: w3wp eating up memory and not giving it back
body: <p>I have a classic asp.net page in .net 4.6.1.
  It loads 4 MB of data (they want it on one page) and no matter I simplify it, the IIS Worker Process w3wp.exe eats up a Gig of data, and never expires anything or gives any memory back.
  Why?</p>
  
  <pre><code>&lt;%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %&gt;
  &lt;asp:Content ID="BodyContent" ContentPlaceHolderID="MainContent" runat="server"&gt;
           &lt;asp:GridView ID="gvSelectionList" runat="server" AutoGenerateColumns="false" CssClass="LPSCriteriaSelection" EnableViewState="False"&gt;
              &lt;Columns&gt;
                  &lt;asp:TemplateField HeaderText="SerialNumber"&gt;
                      &lt;ItemTemplate&gt;
                          &lt;asp:HyperLink ID="hlSerialNumber" Text='&lt;%#GetSerialNumberText(Container.DataItem)%&gt;' /&gt;
                      &lt;/ItemTemplate&gt;
                  &lt;/asp:TemplateField&gt;
              &lt;/Columns&gt;
          &lt;/asp:GridView&gt;
  &lt;/asp:Content&gt;
  </code></pre>
  
  <p>Here's the code</p>
  
  <pre><code>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&lt;SerialNumberData&gt;
  {
      internal ExpandableSelections()
      {   // Emulate database call
          for (int i = 1; i &lt; 72000; i++)
              this.Add(new SerialNumberData("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"));
      }
  }
  </code></pre>