PRB: Prozessübergreifend-COM-Automatisierung kann Clientanwendung auf Win95/98 hängen

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 216400 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Alles erweitern | Alles schließen

Problembeschreibung

Beim Automatisieren einer Out-of-Process COM-Server von einer Clientanwendung, wenn der Client-Code eine enge Schleife eingibt oder umfangreiche Anforderungen für neue Schnittstellen beziehen, kann die Client-Anwendung während einer Automatisierung-Aufrufs, dass der Benutzer der Vorgang fehlerbedingt beendet hängen. Sobald nicht mehr reagiert, schlägt jeder COM-Anforderung im Zusammenhang mit eine Schnittstelle gemarshallte. Deaktivieren Sie das Problem ist ein Neustart erforderlich.

Das Problem tritt nur auf Systemen mit Windows 95 und Windows 98.

Ursache

Wenn eine Schnittstelle über Prozessgrenzen hinweg gemarshallt wird, werden eine Anzahl von Systemobjekten erstellt, um Kommunikation zwischen Client und Server-Prozessen zu behandeln. Dies umfasst den Proxy/Stub, zusammen mit den OID und OXID, die von COM zum Identifizieren der Benutzeroberfläche gemarshallt werden benötigt. Wenn die Schnittstelle durch den Clientprozess freigegeben wird, werden diese Objekte während der Garbagecollection zerstört.

Standardmäßig verwendet die COM-lazy Garbagecollection Systemressourcen freizugeben, die nicht mehr benötigt werden. Diese Auflistung tritt während der relativer Inaktivität. Wenn eine Client-Anwendung nicht ausreichend freier Zeit für Garbagecollection bietet, ist es möglich, dass das System nicht mehr genügend Ressourcen und nicht mehr Schnittstellen gemarshallt wird. Wenn dies der Fall ist, kann die COM-Schicht selbst beschädigt, weitere Garbagecollection verhindern, bis das System neu gestartet wird.

Die häufigste Ursache für das Problem ist, dass der Client-Code eine enge Schleife eingegeben hat, oder eine intensive Periode Automatisierung, die im Zusammenhang mit eine Hierarchie geschachtelte Objekt führt, wobei werden aufeinander folgende Aufrufe vorgenommen abzurufen und freizugeben zahlreiche Out-of-Process-Objekte in kurzer Zeit. Das folgende Codebeispiel zeigt z. B. hierarchisch drei Schnittstellen erfordert gemarshallt werden, jedem Aufruf die Methode PrintOut geschachtelte Objekt. Da der Code in einer engen Schleife ausgeführt wird, die Gesamtzahl der Schnittstellen gemarshallt werden 30 ist:
   For i = 1 To 10
      oExcel.ActiveWorkbook.Sheets(i).UsedRange.PrintOut
   Next i
				
für Windows 95 und Windows 98, die Gesamtzahl der Schnittstellen, die gleichzeitig gemarshallt werden kann ungefähr 65.536 ist.

Lösung

Entwickler müssen die Anzahl der Objektverweise, die Sie während der geschlossenen Schleifen anfordern oder stark Zeiträume der Automatisierung zu minimieren. Wenn eine Schnittstelle mehr als einmal erforderlich ist, sollten Sie auf gehalten und wiederholt statt freigegeben und mehrere Male hintereinander reacquired verwendet.

Beispielsweise diese modifizierte Version des obigen Beispiels führt die gleiche Aufgabe jedoch erfordert nur zwei Schnittstellen gemarshallt werden für jeden Aufruf drucken (aus dem obigen Code eine Reduzierung 30 Prozent):
   Set oBook = oExcel.ActiveWorkbook
   For i = 1 To 10
      oBook.Sheets(i).UsedRange.PrintOut
   Next i
				
andere mögliche Lösung möglicherweise um einige der Automatisierung Code in-Process in den Server zu verschieben, wenn der Server für die Skripterstellung in-Process ermöglicht. Microsoft Office-Produkten integrieren z. B. VBA-Skripterstellung für interne Automatisierung. Verschieben Sie den Code der Schleife in einem VBA-Modul, konnte Sie mehrere Schnittstellen Marshalling vermeiden und stattdessen aufrufen ein Makros, das den Server die Arbeit tun kann.

Informationsquellen

Weitere Informationen finden Sie in der folgenden Artikel der Microsoft Knowledge Base:
219905So wird 's gemacht: Dynamisches Hinzufügen und Ausführen eines VBA-Makros aus Visual Basic

Eigenschaften

Artikel-ID: 216400 - Geändert am: Mittwoch, 24. Januar 2007 - Version: 4.4
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft Windows 95
  • Microsoft Windows 98 Standard Edition
  • Microsoft Windows Millennium Edition
Keywords: 
kbmt kbautomation kboleapp kbprb KB216400 KbMtde
Maschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 216400
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com