Sdílet prostřednictvím


Zpožděné načítání dokumentů

Když uživatel znovu otevře řešení sady Visual Studio, většina přidružených dokumentů se nenačte okamžitě. Rám okna dokumentu se vytvoří ve stavu čekání na inicializaci a zástupný rámec (označovaný jako stub frame) se umístí do tabulky běžících dokumentů (RDT).

Rozšíření může způsobit zbytečné načtení dokumentů projektu dotazováním prvků v dokumentech před jejich načtením, což může zvýšit celkové nároky na paměť pro Visual Studio.

Načítání dokumentu

Zástupný rámeček a dokument jsou plně inicializovány, když uživatel přistupuje k dokumentu, například výběrem záložky v rámečku okna. Dokument lze také inicializovat rozšířením, které požaduje data dokumentu, a to buď přímým přístupem k RDT k získání dat dokumentu, nebo nepřímo přístupem k RDT provedením jednoho z následujících volání:

Informace o načtení dokumentu zjistíte přihlášením k odběru události RDT, která se vyvolá po úplné inicializaci dokumentu. Existují dvě možnosti:

Následující příklad je hypotetický scénář přístupu k dokumentu: Rozšíření sady Visual Studio chce zobrazit některé informace o otevřených dokumentech, například počet uzamčení úprav a něco o datech dokumentu. Vytvoří výčet dokumentů v RDT pomocí IEnumRunningDocuments a volá GetDocumentInfo pro každý dokument, aby načetl počet zámků pro úpravy a data dokumentu. Pokud je dokument ve stavu čekání na inicializaci, žádost o data dokumentu způsobí, že se zbytečně inicializuje.

Efektivnějším způsobem přístupu k dokumentu je použít GetDocumentEditLockCount k získání počtu zámků úprav a poté použít GetDocumentFlags k určení, jestli byl dokument inicializován. Pokud příznaky nezahrnují _VSRDTFLAGS4.RDT_PendingInitialization, dokument už byl inicializován a vyžádání dat dokumentu s GetDocumentData nezpůsobí zbytečnou inicializaci. Pokud příznaky zahrnují _VSRDTFLAGS4.RDT_PendingInitialization, rozšíření by se mělo vyhnout vyžádání dat dokumentu, dokud není dokument inicializován. Tato inicializace může být detekována v obslužné rutině OnAfterAttributeChange(Ex) události.

Otestujte rozšíření, abyste zjistili, jestli vynucují inicializaci.

Neexistuje žádná viditelná indikace, zda byl dokument inicializován, takže může být obtížné zjistit, jestli vaše rozšíření nutí k inicializaci. Můžete nastavit klíč registru, který usnadňuje ověření, protože způsobí, že název každého dokumentu, který není plně inicializován, bude mít v názvu text [Zástupný kód].

V HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\14.0\BackgroundSolutionLoadnastavte StubTabTitleFormatString na {0} [Stub].