Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Wanneer een gebruiker een Visual Studio-oplossing opnieuw opent, worden de meeste bijbehorende documenten niet onmiddellijk geladen. Het vensterframe van het document wordt gemaakt in een staat van in afwachting van initialisatie, en een tijdelijke aanduiding (een zogenaamde stub frame) wordt geplaatst in de Running Document-table (RDT).
Uw extensie kan ertoe leiden dat projectdocumenten onnodig worden geladen door query's uit te voeren op elementen in de documenten voordat ze worden geladen, waardoor de totale geheugenvoetafdruk voor Visual Studio kan worden verhoogd.
Laden van document
Het stubframe en document worden volledig geïnitialiseerd wanneer de gebruiker het document opent, bijvoorbeeld door het tabblad van het vensterframe te selecteren. Het document kan ook worden geïnitialiseerd door een extensie die de gegevens van het document aanvraagt, hetzij door rechtstreeks toegang te krijgen tot de RDT om de documentgegevens te verkrijgen of indirect toegang te krijgen tot de RDT door een van de volgende aanroepen uit te voeren:
De vensterframemethode Show .
De vensterframemethode GetProperty kan worden toegepast op een van de volgende eigenschappen:
Als uw extensie beheerde code gebruikt, moet u GetDocumentInfo alleen aanroepen als u zeker weet dat het document niet in de staat van lopende initialisatie verkeert of als u wilt dat het document volledig wordt geïnitialiseerd. De reden hiervoor is dat de methode altijd het doc-gegevensobject retourneert, waardoor het indien nodig wordt gemaakt. In plaats daarvan moet u een van de methoden op de
IVsRunningDocumentTable4interface aanroepen.Als uw extensie gebruikmaakt van C++, kunt u doorgeven
nullvoor de parameters die u niet wilt.U kunt onnodig laden van documenten voorkomen door een van de volgende methoden aan te roepen voordat u om de relevante eigenschappen vraagt voordat u om andere eigenschappen vraagt:
GetProperty met behulp van __VSFPROPID6. VSFPROPID_PendingInitialization.
GetDocumentFlags. Met deze methode wordt een _VSRDTFLAGS4 object geretourneerd dat een waarde voor _VSRDTFLAGS4 bevat. RDT_PendingInitialization als het document nog niet is geïnitialiseerd.
U kunt erachter komen wanneer een document is geladen door u te abonneren op de RDT-gebeurtenis die wordt gegenereerd wanneer een document volledig is geïnitialiseerd. Er zijn twee mogelijkheden:
Als het gebeurtenissink IVsRunningDocTableEvents2 implementeert, kunt u zich abonneren op OnAfterAttributeChangeEx.
Anders kunt u zich abonneren op OnAfterAttributeChange.
Het volgende voorbeeld is een hypothetisch scenario voor documenttoegang: een Visual Studio-extensie wil bepaalde informatie weergeven over geopende documenten, bijvoorbeeld het aantal bewerkingsvergrendelingen en iets over de documentgegevens. Hiermee worden de documenten in de RDT opgesomd met behulp van IEnumRunningDocumentsen wordt vervolgens voor elk document aanroepen GetDocumentInfo om het aantal bewerkingsvergrendelingen en documentgegevens op te halen. Als het document in de status Wachtend op initialisatie is, leidt het aanvragen van de documentgegevens ertoe dat het onnodig wordt geïnitialiseerd.
Een efficiëntere manier om toegang te krijgen tot een document is door het aantal bewerkingsvergrendelingen op te GetDocumentEditLockCount halen en vervolgens te gebruiken GetDocumentFlags om te bepalen of het document is geïnitialiseerd. Als de vlaggen geen _VSRDTFLAGS4.RDT_PendingInitialization bevatten, is het document al geïnitialiseerd en veroorzaakt het opvragen van de documentgegevens voor dit document met GetDocumentData geen onnodige initialisatie. Als de vlaggen wel _VSRDTFLAGS4.RDT_PendingInitialization bevatten, moet de extensie voorkomen om documentgegevens aan te vragen totdat het document is geïnitialiseerd. Deze initialisatie kan worden gedetecteerd in de OnAfterAttributeChange(Ex) gebeurtenis-handler.
Testextensies om te zien of initialisatie wordt afgedwongen
Er is geen zichtbare aanwijzing om aan te geven of een document is geïnitialiseerd, zodat het lastig kan zijn om erachter te komen of uw extensie initialisatie afdwingt. U kunt een registersleutel instellen die verificatie eenvoudiger maakt, omdat de titel van elk document dat niet volledig is geïnitialiseerd, de tekst [Stub] in de titel bevat.
Stel In HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\14.0\BackgroundSolutionLoadStubTabTitleFormatString in op {0} [Stub].