Re: Out-of-memory error: sample app

Tech-Archive recommends: Repair Windows Errors & Optimize Windows Performance



See responses inline:

The other problem I've seen is that after the 2.0 thread dies or is
killed if I return to that page - without clicking the button to
request datarows - memory begins to skyrocket again immediately. It
seems like ASP.NET is somehow remembering what it was doing when it
died and wants to pick up and do it again - which of course leads to
another crash.

Sounds like it's taking the ViewState of the textbox and re-submitting
which is of course, going to ask for the same data again, and thus,
crash your app again.

Does this happen when you CLOSE the web browser and re-open?

Note: I know it's poor practice to load so much data into a grid.

Yes, Indeed it is. There is no way you can limit the amount of data to
be populated?

How much data are we actually talking about here? 50 rows? 500 rows?
5000 rows? 500,000 rows?


I'm
dealing with a huge production legacy application here and we are in
the process of refactoring. In order to take advantage of some third
party tools we upgraded to framework 2.0. At this point we started
having memory problems with some admittedly poorly designed pages that
allow users to pull ridiculous amounts of data. So if your only answer
is "don't pull so much data" well . . . thanks, no kidding.

Don't pull so much data. =)

Here's my sample app - basically it creates a huge datatable and tries
to load it into a grid:

BigTable.aspx:

<%@ Page language="c#" Codebehind="BigTable.aspx.cs"
AutoEventWireup="false" Inherits="BigTable.BigTable" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>BigTable</title>
<meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema"
content="http://schemas.microsoft.com/intellisense/ie5";>
</HEAD>
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server">
<asp:DataGrid id="grdRows" style="Z-INDEX: 101; LEFT: 1px; POSITION:
absolute; TOP: 1px" runat="server"
Width="792px"></asp:DataGrid>
&nbsp;
<asp:Label id="lblRowsToLoad" style="Z-INDEX: 104; LEFT: 8px;
POSITION: absolute; TOP: 152px"
runat="server" Width="144px">Rows To Load</asp:Label>
<asp:TextBox id="txtRowsToLoad" style="Z-INDEX: 103; LEFT: 8px;
POSITION: absolute; TOP: 176px"
runat="server" Width="80px">5</asp:TextBox>
<asp:Button id="btnLoadRows" style="Z-INDEX: 102; LEFT: 8px;
POSITION: absolute; TOP: 200px"
runat="server" Text="Load Rows"
OnClick="btnLoadRows_Click"></asp:Button>
&nbsp;
</form>
</body>
</HTML>




BigTable.aspx.cs:


using System;
using System.Data;

namespace BigTable
{
public partial class BigTable : System.Web.UI.Page
{
protected System.Web.UI.WebControls.DataGrid grdRows;
protected System.Web.UI.WebControls.Button btnLoadRows;
protected System.Web.UI.WebControls.TextBox txtRowsToLoad;
protected System.Web.UI.WebControls.Label lblRowsToLoad;

protected void btnLoadRows_Click(object sender,
System.EventArgs e)
{
System.Data.DataTable dt = new DataTable();
for (int x = 0; x < 10; x++) //10 columns
{
dt.Columns.Add(x.ToString(), typeof(String));
}
System.Data.DataRow dr;
int yTotal = int.Parse(txtRowsToLoad.Text);
for (int y = 0; y < yTotal; y++) //Add the requested number
of rows.
{
dr = dt.NewRow();
for (int x = 0; x < 10; x++) //insert a string value
into each column of each row.
{
dr[x] = x.ToString();
}
dt.Rows.Add(dr);
}
grdRows.DataSource = dt;
grdRows.DataBind();
}
}
}


Can we see any "actual" code? This seems to just be an example of
building a DataTable.

BTW, your Web frontend really "shouldn't" be creating your data model
on the fly. Simply from a maintainability stand-point. I always defer
these tasks to another tier/assembly. Too much messiness in the UI =)

Hope this might help!

Sean

.



Relevant Pages

  • Re: Lindows programs unexpectantly closing
    ... This most often happens while using my web browser. ... You could have a memory leak. ... no problem there although i would set max user processes to anything else ... WARNING WILL CRASH SYSTEM ...
    (alt.os.linux)
  • Re: parallel port pins
    ...   the memory location approach is the best way to do this, otherwise someone else has to make a driver for it or go through the VISA layer, and treat it like a sort of serial port. ... You can't specify the direction of the port pins on a pin by pin basis. ... All you need to do is make sure the parallel port is capable of talking in both directions, and then read from or write to that memory address that the parallel port is attached to and that's it. ...
    (comp.lang.labview)
  • Re: WinXP very slow (virtual memory low)
    ... requires a couple minutes just to open the web browser offline. ... notice quite a bit of disk activity and sometimes the disk runs for ... What version of Firefox are you using? ... it specifically that its the only time you are seeing the Virtual Memory ...
    (microsoft.public.windowsxp.help_and_support)
  • Re: Is Chris Hills a troll?
    ... running other applications like a word processor or web browser and so ... to 150 Mb are actually used, and hence mapped to physical memory. ... I've got two gigs of RAM, and scientific papers are distributed in PDF. ...
    (comp.lang.c)
  • [SLE] Memory Manager <---> Application Two Way API
    ... use up as much memory as possible. ... memory leaks) and fill up the swap partition. ... so that applications can hog up RAM when there is RAM to spare and then trim ... The web browser renders all of the web pages it comes across ...
    (SuSE)