| |
 | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
 | PNY: der unverzichtbare Partner für umfassende KI-Lösungen von Workstations bis zu Edge Computing und KI-Cluster-Bereitstellung, eine Pressemitteilung
|
Autor
|
Thema: Problem: VBA Forms werden komplett in Speicher geladen - Anzahl GDI Handles sehr hoch (1136 mal gelesen)
|
CADoktor Mitglied Techniker

 Beiträge: 35 Registriert: 29.03.2006
|
erstellt am: 27. Okt. 2010 15:03 <-- editieren / zitieren --> Unities abgeben:         
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 / zitieren -->
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

 Beiträge: 35 Registriert: 29.03.2006
|
erstellt am: 27. Okt. 2010 16:53 <-- editieren / zitieren --> Unities abgeben:         
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 / zitieren -->
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

 Beiträge: 35 Registriert: 29.03.2006
|
erstellt am: 28. Okt. 2010 10:53 <-- editieren / zitieren --> Unities abgeben:         
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 |