게시물과 포럼을 살펴 보았지만이를 달성 할 방법을 찾지 못했습니다.
10,000,000 Person 객체의 배열이 있습니다. Streamed WCF Net.Tcp 웹 서비스를 사용하여 네트워크를 통해 이러한 개체를 보냅니다.
문제는 첫 번째, 예를 들어 배열의 5000 Person 객체를 그대로 읽고 처리하고 싶다는 것입니다. 그 후 스트림을 진행하고 5000 개를 더 읽을 것입니다.
내가 알 수있는 한 C #에는 명시적인 개체 크기가 없기 때문에이 작업을 수행하는 방법을 찾을 수 없었습니다. 에서와 같이 스트림의 처음 312 바이트를 읽고 "예, 이것이 첫 번째 Person 객체입니다. 이제 다음 312 바이트를 읽고 다음 사람을 가져옵니다."라고 말할 수는 없습니다.
이상적으로 ProtoBuf-Net 을 사용 하여 내 개체를 직렬화하고 싶지만 .NET BinaryFormatter 도 괜찮습니다.
나는 또한 5000의 배열과 같은 청크 단위로 데이터를 보낼 수 있습니다.하지만 매번 새로운 tcp 연결을 열지 않고 그렇게하고 싶습니다. 스트림을 읽는 코드에 "좋아, 방금 보낸 모든 것을 역 직렬화 (5000의 배열) 한 다음 스트림에 5000을 계속 쓸 것입니다."이라고 말하는 방법 만 있다면.
어떤 아이디어? 감사.
.NET에서 대부분의 개체에 대해 명시적인 크기가 없을 수 있지만 직렬화 된 개체의 크기를 찾을 수 있습니다. 먼저 직렬화 된 객체의 크기 (바이트)를 보낸 다음 직렬화 된 객체를 보냅니다.
// psuedo-code
byte[] serializedObj = DoSerialization(Person); // we see length on an array
using (var writer = new StreamWriter(stream)) {
writer.Write(serializedObj.Length);
stream.Write(serializedObj);
}
개체를 보내는 내용과 방법을 수정하여 대량으로이 작업을 수행 할 수도 있습니다. 을 만들고 List<Person>
N 번호를 추가 Person
하고 목록을 직렬화하고 이전과 같이 보낼 수 있습니다.
데이터를 보내기 전에 크기를 보내는 것이 필요한지 확실하지 않지만 스트림을 읽을 때 예상되는 바이트 수를 알면 도움이 될 수 있습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다