Moin,
Ich bin hier schier am verzweifeln. Da ein Dienst, den ich gebastelt habe, mal den Server lahmgelegt hat, habe ich auf den Speicherverbrauch geschaut. Oups ... jeder Aufruf der Datenbank routine kostet 4-16k. Es reicht aus, einfach nur dir Funktion open_fdd und close_fdd aufzurufen. Hier der entsprechende Code:
Delphi-Quellcode:
function open_fdd : PMySQL;
var
_myCon: PMySQL;
begin
result :=
nil;
try
_myCon := mysql_init(
nil);
logdatei('
Verbindungsdiscriptor initialisiert','
mysql.log');
except
_islog := true;
logdatei('
Irgendein Problem ' + mysql_error(_myCon),'
mysql.log');
//beep;
end;
if _myCon =
nil then begin
logdatei('
Nicht genug freier Speicher, um Verbindungsdeskriptor zu initialisieren','
mysql.log');
Exit;
end;
if mysql_real_connect(_myCon, cMySQLhost, cMySQLuser, cMySQLpass, cMySQLdb, cMySQLport,
nil, 0) =
nil
then begin
logdatei('
Die Verbindung konnte nicht hergestellt werden. Ursache: ' + mysql_error(_myCon),'
mysql.log');
Exit;
end;
result := _mycon;
end;
function close_fdd(_myCon : PMySQL) : boolean;
var _text :
string;
begin
try
mysql_close(_myCon);
logdatei('
DB sauber geschlossen','
mysql.log');
except
_islog := true;
_text := mysql_error(_myCon);
logdatei('
Fehler beim Schliessen der DB: '+_text,'
mysql.log');
end;
result := true;
end;
Die Funktion logdatei kann es nicht sein (ich hatte die schon einmal auskommentiert). Aber auch hier mal den Code anbei:
Delphi-Quellcode:
function Logdatei(Text: string; filename : string) : Integer;
var
LogFile: TextFile;
TDTempStr: string;
errorlevel : Integer;
sDayDir : string;
sMonthdir : string;
sYearDir : string;
_sAppDir : string;
begin
_sAppDir := ExtractFileDir(Application.ExeName);
errorlevel := 0; // Keine Fehler
sYearDir := _sAppDir+'\'+dateletters(inttostr(yearof(date)));
sMonthDir := sYearDir+'\'+dateletters(inttostr(monthof(date)));
sDayDir := sMonthDir+'\'+dateletters(inttostr(DayOfTheMonth(date)));
if _islog then begin
if not DirectoryExists(sYearDir) then CreateDir(sYearDir);
if not DirectoryExists(sMonthDir) then CreateDir(sMonthDir);
if not DirectoryExists(sDayDir) then CreateDir(sDayDir);
if filename<>'startlog.log' then filename := sDayDir+'\'+filename else filename := _sAppDir+'\'+filename;
try
DateTimeToString(TDTempStr, 'dd.mm.yyyy hh:nn:ss', Now());
TDTempStr := TDTempStr + ': ' + Text;
AssignFile(LogFile, filename);
if not (FileExists(filename)) then
begin
Rewrite(logfile);
end else begin
Append(LogFile);
end;
Writeln(LogFile, TDTempStr);
Flush(LogFile);
CloseFile(LogFile);
except
errorlevel := 1; // Fehler
end;
end;
result := errorlevel;
end;
function dateletters(_in : string) : string;
begin
_in := trim(_in);
if length(_in) = 1 then result := '0' else result := '';
result := result + _in;
end;
Wenn ich mit dem MemoryCheck rangehe, bekomme ich eine Virtual Alloc Meldung (siehe Sceenshot anbei).
Hat da mal jemand eine Idee?
Gruss
EL