簡體   English   中英

在服務器和客戶端之間發送查詢結果的最有效方法是什么

[英]What is the most efficient way to send query results between Server and Client

我有這個用C#編寫的服務器/客戶端應用程序。 服務器端有一個SQL Server,當客戶端需要一個表時,它向服務器應用程序發送請求,服務器應用程序連接到SQL Server並檢索表並通過NetworkStream將其發送到客戶端。

這是發送DataSet XML Stream的服務器端代碼

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

我正在將此xml文件作為字節讀取並將其轉換為字符串並再次將其轉換為DataSet。 這是客戶端代碼:

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>等)以識別數據類型我正在發送? 謝謝。

PS:我正在使用異步服務器和客戶端來發送和接收數據。

取決於您的高效意味着什么。 有幾個權衡要做。 你想節省帶寬嗎? 那么像JSON和XML這樣的純文本格式就不是了。 使用一個不那么冗長的協議並支持壓縮而不必使用Base64編碼是一個更好的主意。 當然這意味着你將使用更多的CPU周期。 還有緩存需要考慮。 您可以驗證客戶的數據自上次請求后是否已失效? 如果是這樣,那么可以存儲整個集合甚至部分集合的緩存機制將節省更多帶寬。 當然,這意味着如果您直接使用緩存到驅動器,您將使用更多內存和可能更多的硬盤空間。

我認為你的問題比你意識到的要深刻得多。

您應該使用WCF執行此類任務。 你可以在這里讀到它

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM