문제

안녕하세요 여러분, 여기 문제가 있습니다.

본질적으로, 나는 비교적 큰 사전을 포함하는 매우 큰 목록을 가지고 있습니다.

기본적으로 메모리 컬렉션이 매우 큽니다.

그런 다음이 컬렉션을 수동으로 XML로 직렬화하고 HTTP로 보내십시오. 말할 것도없이, XML은 너무 커서 때로는 너무 커서 보내기 전에 외곽 예외를 얻습니다.

.NET에서는 잠재적 인 메모리 사용량을 계산하는 방법을 어떻게해야합니까? 예를 들어,이 경우 한 번에 소량의 컬렉션 만 처리하여 XML을 청크로 분류해야합니다.

각 "청크"의 크기를 즉시 효율적으로 계산하려면 어떻게해야합니까? "한 번에 100 개 항목을 프로세스"와 같은 임의의 숫자를 선택하고 싶지 않습니다. 나는 대략적으로 각 청크가 사례별로 얼마나 큰지 알고 싶습니다.

건배

업데이트

@Jacob 은이 특정 문제에 대한 최상의 솔루션을 제공했지만 앱의 개념적 구조 자체가 결함이 있습니다.

실제로, 솔루션은 컬렉션을 작업 할 때 메시지가 얼마나 큰지를 계산하기 위해 메시지의 일부를 실행하는 것입니다.

그런 다음 수용 할 수있는 크기의 각 단위를 하나씩 보냅니다.

그러나 이것은 해킹 일뿐입니다. 실제 해결책은 큰 메시지를 전달하지 않는 방법을 찾거나 완전히 다른 프로토콜을 사용하는 것입니다.

있습니다 주제에 대한 흥미로운 게시물 비누를 사용하고 싶다면 너무 많은 데이터를 보내는 방법을 찾기로 결정했습니다.

도움이 되었습니까?

해결책

나는 당신이 무엇보다 개념적 문제가있을 수 있다고 생각합니다. "잠재적 메모리 사용량 계산"은 "각 청크의 크기를 효율적으로 계산"과 상충됩니다. 유일한 방법 진짜 적절한 청크 크기가 실제로 전환하십시오.

이 효율적으로 오는 가장 좋은 방법은 스트리밍 객체를 제안하는 사람들이 말하는 것과 관련하여 점차적으로 다루는 것입니다. 실제 스트리밍을 활용할 수없는 경우 한 번에 하나의 개념 단위를 진행할 수 있도록 직렬화를 구조화하고 싶을 것입니다 (예 : 목록에있는 하나의 항목이 Attendant Dictionary Children).

다른 팁

메모리에 거대한 XML 파일을 피하는 것을 피하기 위해 데이터를 스트리밍하지 않겠습니까?

어떻게 보내고 있습니까? 스트리밍을 수행 할 수있는 WCF를 통해 그렇게해야합니다. 또한 구성을 통해 XML 또는 바이너리 사용 여부 또는 무엇이든 선택할 수 있습니다.

보내는 것이 문제라면받는 것이 문제가되지 않습니까? 절반 문제를 해결하려고하는 것처럼 들립니다. XML은 큰 데이터에 큰 도움이되지 않습니다.

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