2012-12-01 3 views
3

저는이 서버/클라이언트 응용 프로그램을 C#으로 작성했습니다. 서버 측에 SQL Server가 있습니다. 클라이언트는 서버 응용 프로그램에 요청을 보내고 서버 응용 프로그램은 SQL Server에 연결하여 테이블을 검색하고 NetworkStream을 통해 클라이언트에 보냅니다. 서버와 클라이언트간에 쿼리 결과를 보내는 가장 효율적인 방법은 무엇입니까

는 데이터 집합 XML 스트림을

using (var networkStream = new NetworkStream(m_workerSocket[0])) 
{ 
    dataSet.WriteXml(networkStream); 
} 

를 전송하는 서버 측 코드입니다 그리고 난 바이트로이 XML 파일을 읽고 문자열로 변환하고 다시 데이터 집합으로 변환하고있다.

TextReader reader = new StringReader(richTextRxMessage.Text); 
DataSet dataSet = new DataSet(); 
dataSet.ReadXml(reader); 
DataTable dtProd = new DataTable(); 
dataGridView1.DataSource = dataSet.Tables[0]; 

내 질문이 클라이언트/서버 사이에 테이블을 전송하는 효율적인 방법입니다 : 이 클라이언트 측 코드? 10k 항목과 같은 큰 테이블에 문제가 있습니까? 이를 최적화하려면 어떻게해야합니까?

인스턴트 메시지 또는 다른 유형의 파일과 같은 테이블을 제외하고는 서버와 클라이언트간에 많은 통신이 이루어집니다. 그래서 어떻게 처리하고 많은 데이터를 파일이나 데이터 세트 등으로 분류 할 수 있습니까? 예를 들어, 보낼 데이터 유형을 식별하기 위해 데이터를 보내기 전에 맞춤 문자열 태그 (예 : <DATASET>, <DOCFILE> 등)를 넣어야합니까? 감사합니다.

추신 : 저는 비동기 서버와 클라이언트를 사용하여 데이터를 보내고받습니다.

+2

WCF에 관해 들었습니까? –

+0

그걸 지금보고 있습니다. – gmnnn

+0

@KirillBestemyanov 정답으로 표시 할 수 있도록 답을 표시 할 수 있습니까? – gmnnn

답변

1

효율적이라는 말에 따라 다릅니다. 몇 가지 트레이드 오프가 있습니다. 대역폭을 절약하려고합니까? 그런 다음 JSON 및 XML과 같은 일반 텍스트 형식을 사용할 수 없습니다. Base64 인코딩을 사용하지 않고 덜 장황하고 압축을 지원하는 프로토콜을 사용하는 것이 좋습니다. 물론 이것은 더 많은 CPU주기를 사용한다는 것을 의미합니다. 또한 고려해야 할 캐싱이 있습니다. 마지막으로 요청한 이후로 클라이언트의 데이터가 무효화되었는지 확인할 수 있습니까? 그렇다면 전체 집합 또는 부분 집합을 저장할 수있는 캐싱 메커니즘으로 훨씬 더 많은 대역폭을 절약 할 수 있습니다. 물론 드라이브에 직접 캐싱을 사용하면 더 많은 메모리와 더 많은 하드 드라이브 공간을 사용할 수 있습니다.

귀하의 질문에 귀하가 깨닫는 것보다 더 깊이가 있다고 생각합니다.

관련 문제