2012-01-25 4 views
4

netNamedPipeBinding과 함께 WCF 서비스를 사용하여 많은 양의 데이터 (매우 긴 개체 목록)를 클라이언트 (물론 동일한 컴퓨터에 있음)로 전송합니다. 문제는 전체 호출이 ~ 250MB의 데이터를 전송하는 데 약 20 초가 걸리며 이는 초당 약 10MB 이상입니다. 메모리를 공유 할 때 전송 속도가 훨씬 빨라질 것으로 예상했습니다. 누구든지 내 성능과 전송 속도를 향상시킬 수있는 방법을 알고 있습니까?WCF with netNamedPipeBinding 성능이 좋지 않음

 <netNamedPipeBinding> 
    <binding name="NetNamedPipeBinding_IDataService" closeTimeout="00:10:00" 
     openTimeout="00:10:00" receiveTimeout="00:10:00" sendTimeout="00:10:00" 
     transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions" 
     hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="2147483647" 
     maxBufferSize="2147483647" maxConnections="10" maxReceivedMessageSize="2147483647"> 
     <readerQuotas maxDepth="32" maxStringContentLength="2147483647" maxArrayLength="2147483647" 
     maxBytesPerRead="4096" maxNameTableCharCount="2147483647" /> 
     <security mode="Transport"> 
     <transport protectionLevel="None" /> 
     </security> 
    </binding> 
    </netNamedPipeBinding> 

고마워 : 여기 내 app.config 파일입니다!

+2

공유 메모리는 매우 빠르지 만 명명 된 파이프는 공유 메모리가 아닙니다. – vcsjones

+0

확인. 올바른 바인딩이지만 바인딩의 백엔드 구현에 신경 쓰지 마십시오. 이 속도는 기본 HTTP 바인딩에서 기대할 수있는 것이고 훨씬 빠른 이름 지정 파이프 바인딩이 아닙니다. – Omri

+0

처리량을 어떻게 측정하고 있습니까? 정말로 데이터 전송 시간이고 "매우 긴 객체 목록"의 직렬화/직렬화 해제가 아닌 것이 확실합니까? –

답변

1

의견과 마찬가지로 문제가되는 전송률이 아니라 직렬화가 더 많습니다.

고려해야 할 3 가지가 있습니다

  • 메모리의 개체의 개최를 직렬화 및 역 직렬화의 CPU 사용량이
  • 는 전송 속도가

250를 전송하려면 MB 이상이면 우선 직렬화 된 다음 전송되고 직렬화됩니다. 이로 인해 3 개의 데이터 복사본이 메모리에 저장되어 디스크 스 래싱이 발생할 수 있습니다.

몇 년 전에 비슷한 문제가 발생하여 dll을 직접 호출하여 메모리 참조를 전달하면 ca를 사용하게됩니다. 1 밀리 초.

관련 문제