PRB: 프로세스 간 COM 자동화를 Win95는/98에서 클라이언트 응용 프로그램에서 응답하지 수 있습니다.

중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 Microsoft 기술 자료에 있는 모든 문서를 한글로 접할 수 있습니다. 그러나 기계 번역 문서가 항상 완벽한 것은 아닙니다. 따라서 기계 번역 문서에는 마치 외국인이 한국어로 말할 때 실수를 하는 것처럼 어휘, 구문 또는 문법에 오류가 있을 수 있습니다. Microsoft는 내용상의 오역 또는 Microsoft 고객이 이러한 오역을 사용함으로써 발생하는 부 정확성, 오류 또는 손해에 대해 책임을 지지 않습니다. Microsoft는 이러한 문제를 해결하기 위해 기계 번역 소프트웨어를 자주 업데이트하고 있습니다.

216400
이 문서가 보관되었습니다. "그대로" 제공되었으며, 업데이트가 되지 않을 것입니다.
현상
클라이언트 응용 프로그램에서 out-of-process COM 서버를 자동화할 때, 클라이언트 코드를 밀접한 루프를 시작할 새 인터페이스를 얻기 위한 광범위한 요청하는 경우, 클라이언트 응용 프로그램에 필요한 프로세스가 비정상적으로 종료될 수 있는 자동화 호출 동안 응답하지 않을 수도 있습니다. 멈춘 후에는 마샬링된 인터페이스와 관련된 모든 COM 요청이 실패합니다. 문제가 선택을 다시 부팅해야 합니다.

이 문제는 Windows 95 및 Windows 98 시스템에 대해서만 발생합니다.
원인
인터페이스를 프로세스 경계를 넘어 마샬링될 때 클라이언트 및 서버 프로세스 간에 통신을 처리하기 위해 여러 시스템 개체 만듭니다. 프록시/스텁, OID 및 COM에 의해 마샬링할 중인 인터페이스를 식별하는 데 필요한 OXID 함께 포함됩니다. 인터페이스를 클라이언트 프로세스에 의해 해제될 때 가비지 수집 중에 이러한 개체는 소멸됩니다.

의도적으로 COM 지연 가비지 수집을 사용하여 더 이상 필요하지 않은 시스템 리소스를 늘리십시오. 이 컬렉션은 상대 비활성 기간 동안 발생합니다. 클라이언트 응용 프로그램에서 가비지 수집이 발생할 적절한 여유 시간을 제공하지 않는 경우 시스템 리소스가 부족해질 및 더 이상 인터페이스를 마샬링할 수 없습니다. 이 경우 COM 계층, 시스템을 다시 시작할 때까지 더 이상 가비지 수집을 방지하는 손상될 수 있습니다.

문제의 가장 일반적인 원인은 클라이언트의 코드 밀접한 루프 입력한 또는 후속 호출을 짧은 시간 동안 많은 out-of-process 개체를 해제할 수 있는 수행되고 중첩된 개체 계층 관련된 자동화 강렬한 기간의 수행하는 것입니다. 예를 들어, 다음 코드 예제에서는 세 가지 인터페이스를 PrintOut 메서드를 호출할 때마다 마샬링되어야 합니다 중첩된 개체 계층 구조를 보여 줍니다. 엄격한 루프에서 코드가 실행되기 때문에 인터페이스 마샬링할 중인 총 30입니다:
   For i = 1 To 10      oExcel.ActiveWorkbook.Sheets(i).UsedRange.PrintOut   Next i				
Windows 95 및 Windows 98, 약 65,536 한 번에 마샬링할 수 있는 인터페이스 총 횟수입니다.
해결 방법
개발자는 개체 참조 밀접한 루프 동안 요청 수를 또는 자동화 많은 기간 최소화 합니다. 인터페이스를 두 번 이상 필요한 경우 이를 합니다 수 데 보유한 및 반복적으로 정식 및 reacquired 여러 번 연속해서 에서 대신 사용됩니다.

예를 들어, 위의 샘플이 수정된 버전의 동일한 작업을 수행하지만 경우에만 두 개의 인터페이스를 마샬링할 수 있어야 합니다 (위의 코드에서 30% 감소) 각 PrintOut 호출에 대한:
   Set oBook = oExcel.ActiveWorkbook   For i = 1 To 10      oBook.Sheets(i).UsedRange.PrintOut   Next i				
서버를 in-process 스크립팅을 허용하는 경우 다른 가능한 해결 일부 있는 자동화 코드 in-process 서버로 이동할 수 있습니다. 예를 들어, Microsoft Office 제품 내부 자동화 VBA 스크립팅 통합합니다. VBA 모듈에 루프 코드를 이동하여 여러 인터페이스를 마샬링 않도록 하고 대신 서버에서 모든 작업을 수행할 수 있게 하여 매크로를 호출할 수 있습니다.
참조
자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
219905HOWTO: 동적으로 추가 및 Visual Basic VBA 매크로 실행

경고: 이 문서는 자동 번역되었습니다

속성

문서 ID: 216400 - 마지막 검토: 01/11/2015 02:28:23 - 수정: 4.4

  • Microsoft Windows 95
  • Microsoft Windows 98 Standard Edition
  • Microsoft Windows Millennium Edition
  • kbnosurvey kbarchive kbmt kbautomation kboleapp kbprb KB216400 KbMtko
피드백