次の方法で共有


ドキュメントの読み込みの遅延

ユーザーが Visual Studio ソリューションを再び開くと、関連付けられているドキュメントのほとんどはすぐに読み込まれません。 ドキュメント ウィンドウ フレームは、保留中の初期化状態で作成され、プレースホルダー ドキュメント (スタブ フレームと呼ばれます) が実行中のドキュメント テーブル (RDT) に配置されます。

拡張機能を使用すると、読み込まれる前にドキュメント内の要素に対してクエリを実行することで、プロジェクト ドキュメントが不必要に読み込まれる可能性があります。これで、Visual Studio のメモリ占有領域全体が増加する可能性があります。

ドキュメントの読み込み

スタブ フレームとドキュメントは、ユーザーがたとえばウィンドウ フレームのタブを選択してドキュメントにアクセスしたときに、完全に初期化されます。 ドキュメントは、ドキュメント データを取得するために RDT に直接アクセスするか、次のいずれかの呼び出しを行って間接的に RDT にアクセスすることで、ドキュメントのデータを要求する拡張機能によって初期化することもできます。

ドキュメントが読み込まれたタイミングは、ドキュメントが完全に初期化されたときに発生する RDT イベントをサブスクライブすることによって確認できます。 次の 2 つの可能性があります。

次の例は、架空のドキュメント アクセス シナリオです。Visual Studio 拡張機能で、開いているドキュメントに関する情報 (たとえば、編集ロック数やドキュメント データに関する情報) を表示したいとします。 IEnumRunningDocuments を使用して RDT 内のドキュメントを列挙し、次に編集ロック数とドキュメント データを取得するために各ドキュメントで GetDocumentInfo を呼び出します。 ドキュメントが保留中の初期化状態である場合、ドキュメント データを要求すると、不必要に初期化されます。

ドキュメントにアクセスするためのより効率的な方法は、GetDocumentEditLockCount を使用して編集ロック数を取得し、次に GetDocumentFlags を使用してドキュメントが初期化されているかどうかを判断する方法です。 フラグに _VSRDTFLAGS4.RDT_PendingInitialization が含まれていない場合は、ドキュメントは既に初期化されており、GetDocumentData を使用してドキュメント データを要求しても、不必要に初期化は行われません。 フラグに _VSRDTFLAGS4.RDT_PendingInitialization が含まれている場合は、ドキュメントが初期化されるまで、拡張機能ではドキュメント データの要求を避ける必要があります。 この初期化は、OnAfterAttributeChange(Ex) イベント ハンドラーで検出できます。

拡張機能をテストして、初期化を強制的に実行するかどうかを確認する

ドキュメントが初期化されているかどうかを示す明白な手掛かりはありません。そのため、拡張機能で強制的に初期化されているかどうかを確認するのが困難な場合があります。 検証が簡単になるレジストリ キーを設定できます。これは、完全に初期化されていないすべてのドキュメントのタイトルのタイトルにテキスト [Stub] が表示されるようになるためです。

HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\14.0\BackgroundSolutionLoad で、StubTabTitleFormatString{0} [Stub] に設定します。