UliA Geschrieben 27. August 2009 Teilen 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 27. August 2009 Teilen 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) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
UliA Geschrieben 27. August 2009 Autor Teilen 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 27. August 2009 Teilen 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Bubble Geschrieben 27. August 2009 Teilen 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
UliA Geschrieben 9. September 2009 Autor Teilen 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.