Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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í:
Metoda rámečku Show okna.
Metoda okenního rámečku GetProperty na libovolné z následujících vlastností:
Pokud vaše rozšíření používá spravovaný kód, neměli byste volat GetDocumentInfo , pokud si nejste jisti, že dokument není ve stavu čekající inicializace nebo chcete, aby byl dokument plně inicializován. Důvodem je to, že metoda vždy vrátí datový objekt dokumentu, a v případě potřeby ho vytvoří. Místo toho byste měli volat jednu z metod v
IVsRunningDocumentTable4rozhraní.Pokud vaše rozšíření používá jazyk C++, můžete předat
nullparametry, které nechcete.Nepotřebné načítání dokumentu se můžete vyhnout voláním některé z následujících metod před vyžádáním odpovídajících vlastností, než požádáte o další vlastnosti:
GetProperty pomocí __VSFPROPID6.VSFPROPID_PendingInitialization.
GetDocumentFlags. Tato metoda vrátí _VSRDTFLAGS4 objekt, který obsahuje hodnotu pro _VSRDTFLAGS4. RDT_PendingInitialization , pokud dokument ještě nebyl inicializová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:
Pokud jímka událostí implementuje IVsRunningDocTableEvents2, můžete se přihlásit k odběru OnAfterAttributeChangeEx,
V opačném případě se můžete přihlásit k odběru OnAfterAttributeChange.
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].