UliA Geschrieben 27. August 2009 Geschrieben 27. August 2009 hi, wir haben ein sehr großes Problem in unserem Warenwirtschaftssystem. Zunächst einmal erst die Vorinfos: Die Entwicklung unseres Programms begann vor über 10 Jahren mit VB. Noch ist die Mehrheit der der Module in VB geschrieben. Allerdings ersetzen und erweitern wir sukzessive unser Programm um VB.NET Komponenten. Momentan ist aber das Hauptprogramm in VB. Dieses wiederrum ruft dann die .NET Komponenten auf, welche darin gehostet werden. Nun kämpfen wir mit einem Problem: VB hat keine anständige Speicherverwaltung, sodass die GDI-Objekte, welche man sich beispielsweise im Task-Manager anzeigen lassen kann, sich während des Betriebs kontinuierlich erhöhen. Windows hat aber ein Limit bei 10.000 Objekten, sodass das Programm bei dieser Grenze immer abstürzt. Das macht sich vorwiegend bei unseren am Terminalserver arbeitenden Usern bemerkbar. Warum besonders bei denen, weiß ich auch nicht. Jetzt die Frage: Wie können wir die entsprechenden GDI-Objekte der Module löschen, wenn diese geschlossen wurden? Bei den "normalen" Clients wird der Speicherbereich hingegen schneller wieder frei.
flashpixx Geschrieben 27. August 2009 Geschrieben 27. August 2009 Ich kann kein .NET, würde aber darauf tippen, dass man analog zu Java alle Referenzen auf ein Objekt entfernen muss und den Garbage Collector per Hand aufruft (sollte man zwar nicht machen, aber könnte eine Übergangslösung sein)
UliA Geschrieben 27. August 2009 Autor Geschrieben 27. August 2009 Ich kann kein .NET, würde aber darauf tippen, dass man analog zu Java alle Referenzen auf ein Objekt entfernen muss und den Garbage Collector per Hand aufruft (sollte man zwar nicht machen, aber könnte eine Übergangslösung sein) nun, die möglichkeit geht immer wobei ich bei vb nicht sicher bin, ob man da in den garbage collector eingreifen kann. aber wie gesagt ist das programm schon sehr alt und es ist viel in vb geschrieben. das problem ist, dass das ein riesiger aufwand wäre. wir würden das gerne anders regeln, z.b. durch eine methode der windows speicherverwaltung, was alle nicht mehr referenzierten objekte löscht
flashpixx Geschrieben 27. August 2009 Geschrieben 27. August 2009 [...] z.b. durch eine methode der windows speicherverwaltung, was alle nicht mehr referenzierten objekte löscht genau das macht der Garbage Collector... Wenn Windows eine interne Grenze hat, dann würde ich eher sagen, dass das Problem bei Euch in der Anwendung liegt und da hilft es nun mal nur, wenn man Code entsprechend designed. Wenn Du nicht mehr referenzierte Objekte entfernen willst, dann nimm den GC, warum Du das nicht willst, ist mir auch schleierhaft
Bubble Geschrieben 27. August 2009 Geschrieben 27. August 2009 Ich nehme an, was geht um via COM eingebundene Komponenten? Um was für Komponenten handelt es sich, mit oder ohne GUI? Überhaupt, in welchen Bereichen entsteht das Problem? Warum gebt ihr die Objekte nicht frei? Womöglich braucht ihr mehr Beratung, als ein paar Tips aus dem Forum. Irgendwann wird wohl eine Neuentwicklung anstehen.
UliA Geschrieben 9. September 2009 Autor Geschrieben 9. September 2009 genau das macht der Garbage Collector... Wenn Windows eine interne Grenze hat, dann würde ich eher sagen, dass das Problem bei Euch in der Anwendung liegt und da hilft es nun mal nur, wenn man Code entsprechend designed. Wenn Du nicht mehr referenzierte Objekte entfernen willst, dann nimm den GC, warum Du das nicht willst, ist mir auch schleierhaft VB hat keinen Garbage Collector! Inzwischen sieht es wohl so aus, dass die alten Controls von Drittherstellern die Ressourcen nicht mehr freigebeben. Deswegen müssen wir damit jetzt leider erst mal leben.
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden