繁体   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