We are running a Delphi webservice which provides customer report data. The data is refreshed every 30 minutes. At some point an EOutOfMemory exception occurs at the customer.
We could reproduce this on a NT4 machine when the webserver ran for about 15 hours (=30 refreshs). The strange thing is that there was plenty of free RAM left at that time (one customer reported it happened to him when there were 1.8 GB of physical RAM available).
I have a stack trace from the point when the problem occured on our NT4 test machine. After opening the TOracleDataset it stopped in GetMem call with EOutOfMemory. The code executed before looks like the following. The redundancies and unnecessary checks are due to the fact that I put the code of four methods together for this posting.
Qry := TOracleDataSet.create(nil);
Qry.Session := FDOASession;
Qry.SQL.Text := ASQL;
if Qry.Active then Qry.Close();
Qry.SQL.Text := ASQL;
Qry.ReadOnly := True;
Qry.ReadBuffer := 10000;
We could reproduce this on a NT4 machine when the webserver ran for about 15 hours (=30 refreshs). The strange thing is that there was plenty of free RAM left at that time (one customer reported it happened to him when there were 1.8 GB of physical RAM available).
I have a stack trace from the point when the problem occured on our NT4 test machine. After opening the TOracleDataset it stopped in GetMem call with EOutOfMemory. The code executed before looks like the following. The redundancies and unnecessary checks are due to the fact that I put the code of four methods together for this posting.
Qry := TOracleDataSet.create(nil);
Qry.Session := FDOASession;
Qry.SQL.Text := ASQL;
if Qry.Active then Qry.Close();
Qry.SQL.Text := ASQL;
Qry.ReadOnly := True;
Qry.ReadBuffer := 10000;