使用WebHttpBinding通过HTTP从SQL传输表格数据的绝对最快方法

时间:2011-07-12 01:18:24

标签: c# wcf json sqldatareader webhttpbinding

使用WCF端点通过HTTP传输SQL表格数据的最快方法是什么?

现在我用ESQL查询Entity Framework,然后将DataTable结果序列化为byte []并将其发送过来,然后在另一端反序列化,这看起来很慢。现在,对于15000多行,序列化数据的大小约为4000字节。我也尝试过OData服务,但这也很慢。

与JSON相比,我认为这是最快的 - 一个只包含1048个SQL行的JSON文件将近20万字节。数据大小与通过HTTP传输的速度之间是否存在直接关联? (看起来很直观,但我并不积极)。

最快的格式是什么?我正在考虑使用SQLDataReader到JSON并发送JSON,我认为应该表现不错,但我不确定。这仅用于数据同步目的。

感谢。

修改的 做了一些跟踪,看起来我的一些初步测量是错误的。请参阅下面的相应方法,以毫秒为单位。

2011年7月11日星期一下午6:42:23   :   :函数'反序列化'持续时间。经历:481毫秒

2011年7月11日星期一下午6:42:23   :   :函数'HttpRequest'持续时间。经历时间:4776毫秒

2011年7月11日星期一下午6:42:22   :   :DataTable长度(字节)= 13047247字节

上面引用的DataTable包含~7000行,看起来很陡,对吧?

1 个答案:

答案 0 :(得分:1)

SqlDataReader是从数据库中获取数据的最快方法,是的。您将遇到的麻烦是,您需要在通过HTTP发送之前完整地汇总结果。您不能只是在从数据库中读取结果时对流进行流式处理。 JSON是表示数据的一种相当紧凑的方式,但由于您不得不一遍又一遍地重复列名,因此使用简单的纯文本制表符分隔值文件会更好。设置Content-type = text / plain并从SqlDataReader获取数据时擦除数据中的任何选项卡。您可能还需要考虑对结果进行压缩 - 具体取决于网络速度与Web服务器处理能力的对比。

- 编辑 -

正如Sean正确指出的那样,纯文本选项不是WCF解决方案。