Compartir a través de


Carga diferida de documentos

Cuando un usuario vuelve a abrir una solución de Visual Studio, la mayoría de los documentos asociados no se cargan inmediatamente. El marco de la ventana del documento se crea en un estado de inicialización pendiente y se coloca un documento de marcador de posición (denominado marco de código auxiliar) en la tabla Documento en ejecución (RDT).

La extensión puede hacer que los documentos del proyecto se carguen innecesariamente consultando elementos de los documentos antes de cargarlos, lo que puede aumentar la superficie de memoria general de Visual Studio.

Carga de documentos

El marco de código auxiliar y el documento se inicializan completamente cuando el usuario accede al documento, por ejemplo, seleccionando la pestaña del marco de la ventana. El documento también se puede inicializar mediante una extensión que solicite los datos del documento, ya sea accediendo directamente al RDT para adquirir los datos del documento o accediendo a RDT indirectamente mediante una de las siguientes llamadas:

Puede averiguar cuándo se ha cargado un documento mediante la suscripción al evento RDT que se genera cuando se inicializa un documento por completo. Hay dos posibilidades:

El ejemplo siguiente es un escenario hipotético de acceso a documentos: una extensión de Visual Studio quiere mostrar información sobre documentos abiertos, por ejemplo, el recuento de bloqueos de edición y algo sobre los datos del documento. Enumera los documentos del RDT mediante IEnumRunningDocumentsy, a continuación, llama GetDocumentInfo a para cada documento para recuperar el recuento de bloqueos de edición y los datos del documento. Si el documento está en estado de inicialización pendiente, la solicitud de los datos del documento hace que se inicialice innecesariamente.

Una forma más eficaz de acceder a un documento es usar GetDocumentEditLockCount para obtener el recuento de bloqueos de edición y, a continuación, usar GetDocumentFlags para determinar si el documento se ha inicializado. Si las marcas no incluyen _VSRDTFLAGS4. RDT_PendingInitialization, el documento ya se ha inicializado y la solicitud de los datos del documento con GetDocumentData no provoca ninguna inicialización innecesaria. Si las marcas incluyen _VSRDTFLAGS4. RDT_PendingInitialization, la extensión debe evitar solicitar los datos del documento hasta que se inicialice el documento. Esta inicialización se puede detectar en el controlador de OnAfterAttributeChange(Ex) eventos.

Probar extensiones para ver si fuerzan la inicialización

No hay ninguna indicación visible para indicar si se ha inicializado un documento, por lo que puede ser difícil averiguar si la extensión está forzando la inicialización. Puede establecer una clave del Registro que facilite la comprobación, ya que hace que el título de cada documento que no se inicialice completamente tenga el texto [código auxiliar] en el título.

En HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\14.0\BackgroundSolutionLoad, establezca StubTabTitleFormatString en {0} [Stub].