다음을 통해 공유


지연된 문서 로드

사용자가 Visual Studio 솔루션을 다시 열면 연결된 문서는 대부분 즉시 로드되지 않습니다. 문서 창 프레임은 초기화 대기 중 상태로 만들어지고 자리 표시자 문서(스텁 프레임이라고 함)는 RDT(실행 중인 문서 테이블)에 배치됩니다.

확장으로 인해 프로젝트 문서가 로드 전에 문서의 요소를 쿼리하여 불필요하게 로드될 수 있으므로 Visual Studio가 차지하는 전체 메모리 공간이 증가할 수 있습니다.

문서 로드

스텁 프레임과 문서는 사용자가 문서에 액세스할 때(예: 창 프레임의 탭을 선택) 완전히 초기화됩니다. 문서 데이터를 가져오기 위해 RDT에 직접 액세스하거나 다음 중 하나를 호출하여 RDT에 간접적으로 액세스하여 문서의 데이터를 요청하는 확장으로 문서를 초기화할 수도 있습니다.

문서가 완전히 초기화될 때 발생하는 RDT 이벤트를 구독하여 문서가 로드된 시기를 확인할 수 있습니다. 다음과 같은 두 가지 가능성이 있습니다.

다음 예제는 가상의 문서 액세스 시나리오입니다. 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]으로 설정합니다.