Freigeben über


Verzögertes Laden von Dokumenten

Wenn ein Benutzer eine Visual Studio-Projektmappe erneut öffnet, werden die meisten zugehörigen Dokumente nicht sofort geladen. Der Dokumentfensterrahmen wird in einem Ausstehend-Initialisierungszustand erstellt, und ein Platzhalterdokument (als Stubrahmen bezeichnet) wird in der Tabelle "Running Document" (RDT) platziert.

Die Erweiterung kann dazu führen, dass Projektdokumente unnötig geladen werden, indem Sie Elemente in den Dokumenten abfragen, bevor sie geladen werden, wodurch der gesamte Speicherbedarf für Visual Studio erhöht werden kann.

Laden von Dokumenten

Der Stubrahmen und das Dokument werden vollständig initialisiert, wenn der Benutzer auf das Dokument zugreift, z. B. durch Auswählen der Registerkarte des Fensterrahmens. Das Dokument kann auch durch eine Erweiterung initialisiert werden, die die Daten des Dokuments anfordert, entweder durch den direkten Zugriff auf das RDT zum Abrufen der Dokumentdaten oder indirekten Zugriff auf das RDT durch einen der folgenden Aufrufe:

Sie können herausfinden, wann ein Dokument geladen wurde, indem Sie das RDT-Ereignis abonnieren, das ausgelöst wird, wenn ein Dokument vollständig initialisiert wird. Es gibt zwei Möglichkeiten:

Das folgende Beispiel ist ein hypothetisches Dokumentzugriffsszenario: Eine Visual Studio-Erweiterung möchte einige Informationen zu geöffneten Dokumenten anzeigen, z. B. die Anzahl der Bearbeitungssperren und etwas über die Dokumentdaten. Sie listet die Dokumente im RDT mithilfe IEnumRunningDocumentsvon RDT auf und ruft dann für jedes Dokument auf GetDocumentInfo , um die Anzahl der Bearbeitungssperren und Dokumentdaten abzurufen. Wenn sich das Dokument im Zustand der ausstehenden Initialisierung befindet, wird das Anfordern der Dokumentdaten unnötig initialisiert.

Eine effizientere Möglichkeit für den Zugriff auf ein Dokument besteht darin GetDocumentEditLockCount , die Anzahl der Bearbeitungssperren abzurufen und dann GetDocumentFlags zu bestimmen, ob das Dokument initialisiert wurde. Wenn die Kennzeichnungen nicht _VSRDTFLAGS4 enthalten . RDT_PendingInitialization, wurde das Dokument bereits initialisiert, und das Anfordern der Dokumentdaten mit GetDocumentData keinem unnötigen Initialisierungsaufwand verursacht. Wenn die Kennzeichnungen _VSRDTFLAGS4 enthalten . RDT_PendingInitialization sollte die Erweiterung das Anfordern der Dokumentdaten vermeiden, bis das Dokument initialisiert wird. Diese Initialisierung kann im OnAfterAttributeChange(Ex) Ereignishandler erkannt werden.

Testen von Erweiterungen, um festzustellen, ob sie die Initialisierung erzwingen

Es gibt keinen sichtbaren Hinweis, um anzugeben, ob ein Dokument initialisiert wurde, sodass es schwierig sein kann, herauszufinden, ob die Erweiterung die Initialisierung erzwingt. Sie können einen Registrierungsschlüssel festlegen, der die Überprüfung vereinfacht, da der Titel jedes Dokuments, das nicht vollständig initialisiert ist, den Text [Stub] im Titel hat.

Legen Sie in HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\14.0\BackgroundSolutionLoad stubTabTitleFormatString auf{0}[Stub] fest.