문제

나는 흥미로운 디자인 문제가 있고 여러분 모두가 몇 가지 제안을 할 수 있기를 바랐습니다. C# 및 .NET 3.0을 사용하고 있습니다

WCF 위에 구축 된 매우 멋지고 확장 가능한 프레임 워크가있어 엔드 포인트 설정과 계약 생성을 자동화합니다. 내가 작업하는 시스템은 다른 방식으로 실행될 수 있습니다. 엔드 포인트는 인터넷의 다른 곳에서 또는 같은 상자의 다른 어셈블리로 실행되거나 동일한 프로세스에서 실행될 수 있습니다. WCF는이 모든 투명을 만드는 데 유용하지만 마지막 경우 효율성을 향상시키고 싶습니다.

나는 실제로 아무데도 가지 않는 일련의 객체의 오버 헤드를 피하고 싶습니다. 같은 어셈블리에서 두 스레드 사이에서 통신하기 위해 그렇게 할 필요는 없습니다. 동시에 시스템 설정에 따라 두 개의 개별 통신 경로가 없으면 유지하기가 훨씬 쉽기 때문에 이미 제자리에있는 WCF 기반 프레임 워크를 활용하고 싶습니다.

나의 첫 번째 생각은 안전하지 않은 맥락에서 객체 포인터를 사용하는 것이 었습니다. 직렬화와 싸우지 않고 최소 금액 만 직렬화하는 것입니다. 이것에 대한 나의 관심사는 GC가 공격적 인 환경의 비동기 메시지에서, 메시지가 포함 된 포인터가 포함 된 포인터를 피할 수있는 기회를 갖기 전에 메시지가 사라질 수 있다는 것입니다.

다음 생각은 gchandles를 사용하는 것이었지만 그들의 행동에 대해 확신이 없습니다. gchandle이 더 이상 참조되지 않았지만 관리되는 객체에 대한 참조가 포함되어 있으면 GC에 의해 정리 되었습니까? 메시지가 길을 잃을 가능성이 크기 때문에 큰 메모리 누출을 도입하는 것이 걱정되며, 우리는 무료 ()를 호출 할 수 없으며, 내가 찾을 수있는 문서는 ... 부족합니다. .

또 다른 생각은 반사를 사용하여 모든 관리되는 객체를 보는 것이지만, 이에 대한 오버 헤드는 크고이 시스템은 가능한 한 효율적이어야합니다.

따라서 요약하면 WCF를 사용하지 않고 프로세스를 통해 객체를 보내려고 노력하고 있습니다. 이는 말할 수있는 한 일시적으로 참조가 없더라도 살아 남기는 것을 의미합니다. 가능해야 할 것 같지만 케이크를 마시고 먹으려 고 노력하는지 궁금합니다.

귀하의 의견에 감사드립니다!

도움이 되었습니까?

해결책

WCF의 "NetNamedPipes"전송 프로토콜을 조사하여 동일한 기계, 프로세스 간 통신을 위해 특별히 설계되었으며 가능한 가장 적은 오버 헤드 (빠른 이진 직렬화 포함)를 조사합니다.

마크

다른 팁

이 기사에서 Null Transport Binding을 확인하십시오.

http://www.codeproject.com/kb/wcf/nulltransportforwcf.aspx

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top