Hallo Gemeinde,
ich schreibe derzeit eine Konsolenanwendung, die Daten von einer Datenbank zur anderen karrt.
Das passiert in einer Schleife, leider wird der Arbeitsspeicherverbrauch immer höher, also gehe ich davon das die Objekte aus den älteren Durchgängen noch irgendwie gespeichert bleiben.
static void Main(string[] args)
{
Console.SetWindowSize(Console.WindowWidth, Console.WindowHeight);
Konfiguration lKonfig = new Konfiguration();
lKonfig.ShowDialog();
int liTimeout = 2000;
if (lKonfig.DialogResult == System.Windows.Forms.DialogResult.OK)
{
liTimeout = lKonfig.Timeout * 1000;
while (Run)
{
try
{
Sql lSql = new Sql(lKonfig.ConnectionStringFirebird, lKonfig.ConnectionStringSybase);
Log.Info("Transfer wird gestartet", ConsoleColor.White);
bool lbAenderung = lSql.AverpZuIcline();
if (lbAenderung)
Log.Info("avERP zu ICLine Transfer erfolgreich beendet. Details zu den Änderungen entnehmen Sie bitte dem Log", ConsoleColor.Green);
else
Log.Info("avERP zu ICLine Transfer erfolgreich beendet. Es gab keine Änderungen", ConsoleColor.Green);
lbAenderung = lSql.IclineZuAverp();
}
catch (Exception e)
{
Log.Fehler(e.Message.ToString());
}
Thread.Sleep(liTimeout);
}
}
}
Ich bin extra dazu übergegangen, das SQL Objekt jeden Durchlauf neu zu erstellen, aber das hat leider auch nichts gebracht. Auch GC.Collect() am Ende der Schleife hilft nicht.
Das Programm läuft so lange bis der Arbeitsspeicher voll ist und schießt sich dann mit einer OutOfMemoryException ab.
Hat jemand einen Tipp was man ändern sollte?
Wenn ihr noch weitere Infos etc braucht, stell ich euch die gerne zur Verfügung