Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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.

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)

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

[...] 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

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.

  • 2 Wochen später...
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.

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.