IClassFactory :: AddRef/IClassFactory :: Release가 같은 목표를 달성 할 수있을 때 IClassFactory :: LockServer가 존재하는 이유는 무엇입니까?IClassFactory :: LockServer의 요점은 무엇입니까?
답변
자세한 내용은 Don Box의 저서 Essential COM에서 설명합니다.
AddRef/Release
IClassFactory 인터페이스의 클래스 개체는 종종 out-of-process COM 서버에서 비어있는 메서드입니다. 이는 서버가 CoRegisterClassObject
을 호출 할 때 클래스 개체에 대한 내부 참조가 유지되므로 "일반"in-process 서버 구현이 AddRef/Release
일 때 클래스 개체의 참조 횟수가 항상 1을 초과하고 서버 CoRevokeClassObject
에 언제 연락해야하는지 알 수 없습니다.
COM 런타임은 CoGetClassObject
을 호출 한 후 클래스 개체에 대한 외부 참조를 마샬링 할 때 IClassFactory::LockServer
을 호출합니다. 이러한 방식으로 서버 프로세스 수명은 외부 참조의 존재 여부에 따라 적절하게 제어 될 수 있습니다.
확실하지는 않지만, 클래스 팩토리를 가져 와서 IClassFactory 인터페이스를 통해 잠그고 인터페이스를 해제하기 위해 CoGetClassObject를 호출 할 수 있다고 생각합니다. 나중에 동일한 클래스에 대해 CoGetClassFactory를 다시 호출하면 메모리에 잠겨 있기 때문에 시스템은 새 클래스를 생성하는 대신 동일한 팩토리 객체를 반환합니다. 이렇게하면 해당 클래스의 많은 오브젝트를 작성할 때 성능이 향상 될 수 있습니다.
예, IClassFactory 인터페이스 포인터를 누르고 있으면 같은 결과를 얻을 수 있습니다. 하지만 앱을 시작할 때 팩토리 객체를 잠그고 종료 할 때 인터페이스 포인터를 풀어 놓으면 (글로벌 변수 등에서) 어딘가에 인터페이스 포인터를 가질 필요가 없습니다.
IClassFactory가 도입 된 이유가 의심 스럽습니다. : LockServer는 서버를 잠그는 것이 의미 론적으로 AddRef'ing과 동일하지 않다는 것입니다. AddRef/Release는 일반적인 객체 라이프 사이클 관리를위한 것으로 명확한 의미론을 정의합니다. 서버를 잠그는 것은 성능 조정입니다.
- 1. make_heap의 요점은 무엇입니까?
- 2. 스캐 폴딩의 요점은 무엇입니까?
- 3. WCF의 요점은 무엇입니까 MaxReceivedMessageSize
- 4. 웹 서비스의 요점은 무엇입니까?
- 5. XPointer 범위의 요점은 무엇입니까?
- 6. CodeSmith에서 ParameterSchema.AllowDBNull의 요점은 무엇입니까?
- 7. Html.DisplayTextFor()의 요점은 무엇입니까?
- 8. Ingalls 테스트의 요점은 무엇입니까?
- 9. ObjectDataSource의 요점은 무엇입니까
- 10. os.error의 요점은 무엇입니까?
- 11. @property와 @synthesize의 요점은 무엇입니까?
- 12. 콩의 요점은 무엇입니까?
- 13. 패딩의 요점은 무엇입니까?
- 14. crossdomain.xml 요점은 무엇입니까?
- 15. 표현식 트리의 요점은 무엇입니까?
- 16. 패키지 주석의 요점은 무엇입니까?
- 17. JAAS의 요점은 무엇입니까
- 18. 번들 패키지의 요점은 무엇입니까?
- 19. IClassFactory :: CreateInstance 메서드의 pUnkOuter 매개 변수
- 20. gtk에서 alloc_color()의 요점은 무엇입니까?
- 21. XNA : Unload()의 요점은 무엇입니까?
- 22. LinqToSQL 내의 DatabaseAttribute의 요점은 무엇입니까?
- 23. 파이썬 달걀 파일의 요점은 무엇입니까?
- 24. JComboBox의 getSelectedItem()의 요점은 무엇입니까?
- 25. EC2에서 인스턴스 저장소의 요점은 무엇입니까?
- 26. XML에서 "ID"태그의 요점은 무엇입니까?
- 27. ScriptManager의 EnablePartialRendering 속성의 요점은 무엇입니까
- 28. 장고의 특성 캐시 - 요점은 무엇입니까?
- 29. clojure에서 lazy-seq의 요점은 무엇입니까?
- 30. CSS 접기 마진의 요점은 무엇입니까?
그 책에서 찾아 보는 것이 좋습니다 ... 왜 그렇게 생각하지 않았습니까! –