Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  AutoCAD VBA
  Problem: VBA Forms werden komplett in Speicher geladen - Anzahl GDI Handles sehr hoch

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  Problem: VBA Forms werden komplett in Speicher geladen - Anzahl GDI Handles sehr hoch (1094 mal gelesen)
CADoktor
Mitglied
Techniker


Sehen Sie sich das Profil von CADoktor an!   Senden Sie eine Private Message an CADoktor  Schreiben Sie einen Gästebucheintrag für CADoktor

Beiträge: 35
Registriert: 29.03.2006

erstellt am: 27. Okt. 2010 15:03    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Windows hat immer noch das Problem, dass die Gesamtzahl der GDI Handles je Prozess nicht mehr als 10000 sein darf.
Wenn die Gesamtzahl der GDI Handles von AutoCAD (incl. der VBA Anwendung) über 10000 steigt, stürzt es mit Systemfehler ab.

Ich habe eine komplexe Anwendung mit über 50 Userforms.
Nun ist das Problem, dass diese Forms direkt nach dem Laden der DVB alle GDI Handles beanspruchen, abwohl Sie eigentlich noch gar nicht initialisiert wurden.
Die Userforms können per VBA Befehl "unload frmFormularname" zwar per Code wieder entladen werden, was dazu führt, dass die GDI Handles bereinigt werden.
Jedoch ist dieser Vorgang umständlich und aufgrund der Formanzahl auch Zeitaufwändig.

Gibt es eine Möglichkeit eine DVB so zu laden, das die Formulare darin "unloaded" bleiben, bis Sie mit .show initialisiert werden?

Vielen Dank vorab für die Hilfe ...

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP


Ex-Mitglied

erstellt am: 27. Okt. 2010 16:36    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

das Problem hätte ich noch nicht gehabt (arbeite auch nicht wirklich mit den VBA-Forms), aber folgende Ideen dazu:

Kannst Du Dein Projekt so aufsplitten, dass die Forms in anderen DVB's untergebracht sind? Dann hast Du nur ein DVB mit Code und lädst Dir je nach benötigtem Formular das entsprechende DVB im Lauf nach und holst/aktivierst Dir das Form daraus.


>> Jedoch ist dieser Vorgang umständlich und aufgrund der Formanzahl auch Zeitaufwändig

Läßt sich aber in Dein Startup hineinschreiben, damit ist's automatisch. Oder ist das 'Unload' der Forms so langsam?


- alfred -

------------------
www.hollaus.at

CADoktor
Mitglied
Techniker


Sehen Sie sich das Profil von CADoktor an!   Senden Sie eine Private Message an CADoktor  Schreiben Sie einen Gästebucheintrag für CADoktor

Beiträge: 35
Registriert: 29.03.2006

erstellt am: 27. Okt. 2010 16:53    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Das mit dem Aufsplitten ist eine Möglichkeit, die wir schon in Betracht gezogen und auch teilweise schon gemacht haben.
Aber es bleiben immer noch eine grosse Anzahl Forms in einer DVB übrig, die aus administrativen Gründen kaum ausgelagert werden können.

Das Unloaden der Froms erfolgt bereits im Startup, aber der Vorgang sebst ist recht langsam, da beim unloaden das Form zuerst initialisiert wird und dann erst entladen.
Dabei werden auch alle VBA Befehle abgewickelt, die im "UserForm_Initialize" Ereignis stehen.

Also nicht wirklich performant bei vielen Forms.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP


Ex-Mitglied

erstellt am: 27. Okt. 2010 17:35    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

schon mal darüber nachgedacht, mit VB6 oder mit VisualStudio UserControls (ActiveX) zu bauen und diese in die VBA-Forms einzubauen?

- alfred -

------------------
www.hollaus.at

CADoktor
Mitglied
Techniker


Sehen Sie sich das Profil von CADoktor an!   Senden Sie eine Private Message an CADoktor  Schreiben Sie einen Gästebucheintrag für CADoktor

Beiträge: 35
Registriert: 29.03.2006

erstellt am: 28. Okt. 2010 10:53    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Der nächste Schritt wird eher ein komplette Portierung der Anwendung auf .NET sein.
Aber da hapert es noch etwas an KnowHow.

Langfristig wird man darum nicht herumkommen, da VBA ja sterben wird und es in der 64 Bit Version jetzt schon unzumutbar langsam läuft und nicht 100% Codekompatibel ist.

Das Programm ist halt sehr umfangreich und VBA war halt sehr easy zu handeln ...

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz