共用方式為


已延遲載入文件

當使用者重新開啟 Visual Studio 解決方案時,不會立即載入大部分相關聯的文件。 文件視窗框架會以暫止初始化狀態建立,而預留位置文件 (稱為虛設常式框架) 則放在執行中的文件資料表 (RDT) 中。

您的擴充功能可能會導致專案文件在載入之前查詢文件中的元素,進而增加 Visual Studio 的整體記憶體使用量。

文件載入中

當使用者存取文件時,會完整初始化虛設常式框架和文件,例如選取視窗框架的索引標籤。 檔案也可以由要求文件資料的擴充功能初始化,方法是直接存取 RDT 以取得文件資料,或透過進行下列其中一個呼叫來間接存取 RDT:

您可以訂閱文件完全初始化時引發的 RDT 事件,以找出文件是否已載入。 有兩種可能性:

下列範例是假設的文件存取案例:Visual Studio 擴充功能想要顯示開啟文件的一些資訊,例如編輯鎖定計數和文件資料的相關資訊。 它會使用 IEnumRunningDocuments 列舉 RDT 中的文件,然後呼叫每個文件的 GetDocumentInfo,以擷取編輯鎖定計數和文件資料。 如果文件處於擱置初始化狀態,要求文件資料會導致不必要地初始化文件。

存取文件更有效率的方式是使用 GetDocumentEditLockCount 來取得編輯鎖定計數,然後使用 GetDocumentFlags 來判斷文件是否已初始化。 如果旗標不包含 _VSRDTFLAGS4.RDT_PendingInitialization,文件已經初始化,而且使用 GetDocumentData 要求文件資料並不會造成任何不必要的初始化。 如果旗標包含 _VSRDTFLAGS4.RDT_PendingInitialization,擴充功能應該避免要求文件資料,直到文件初始化為止。 您可以在 OnAfterAttributeChange(Ex) 事件處理常式中偵測到此初始化。

測試擴充功能,以查看它們是否強制初始化

沒有可見提示可指出文件是否已初始化,因此很難確認擴充功能是否強制初始化。 您可以設定登錄機碼,讓驗證變得更容易,因為它會使未完全初始化的每個文件標題在標題中具有 [虛設常式]文字。

HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\14.0\BackgroundSolutionLoad 中,將 StubTabTitleFormatString 設定為 {0}[虛設常式].