在C#中从远程服务器访问大量数据

时间:2009-06-12 11:12:20

标签: c# sql-server sql-server-2005 ado.net

我有一个位于纽约的数据库,我的HK用户正试图从这个数据库中获取数据。检索到的数据大约为20 MB(如果将Datatable保存为csv,则文件大小为20 mb)。数据大约需要20分钟。

我使用SQL Server 2005作为数据库,使用c#作为桌面应用程序。由于预算限制,我无法为HK用户提供单独的数据库。

有人可以建议一种方法将检索时间缩短到5分钟左右吗?

此致

Pavan

6 个答案:

答案 0 :(得分:1)

一些想法;

  1. 20分钟内的20Mb大约是17kb / s,这是非常慢的 - 你的过程中是否还有其他因素会增加延迟?
  2. 就可能的解决方案而言,可能考虑使用HTTP端点并启用gzip压缩。这将不再是ado.net连接,但您的数据大小应该显着降低,并且取决于应用程序的结构可能非常容易实现。更多信息here
  3. 祝你好运!

答案 1 :(得分:0)

尝试仅检索所需的数据。您可以通过编写Web服务来返回相应的数据,尽管您需要让父亲安全。

或者,在HK安装一个SQL Server Express数据库 - 它是免费的,并且将支持最多4GB的数据,但你必须以某种方式复制数据,以便它与2个环境相匹配。

在一个请求中从数据库返回完整的20MB数据似乎过多。据推测,有充分的理由吗?

答案 2 :(得分:0)

您是否想要获取整个数据库或其他内容?如果没有,我建议分页,即一次检索100条记录。

答案 3 :(得分:0)

只是一个想法,你有没有试过GZIPping数据,因为它越过电线?我发现SQL转储压缩特别好,有时高达90%。当然,这取决于你如何进行查询以确定它是多么容易。

如果您正在通过互联网从HK进行直接的SQL查询到纽约的数据库服务器,这可能不是一个好主意,您可以编写一个执行查询的包装器,然后在传输到远程站点之前压缩结果

答案 4 :(得分:0)

我们正在使用派生数据集的CompressedDataSet。它有两个附加功能:

public string GetCompressedDataSet()
public void SetCompressedDataSet(string data)

这些函数(de)将数据集序列化为XML,然后使用GZip进行(de)压缩。压缩数据集有很长的路要走。

当然,你真的需要20 MB的数据吗?可能是限制您请求的数据的选项。或者将其拆分:询问10x2 mb并每2分钟更新一次应用程序。

答案 5 :(得分:0)

我唯一需要补充的是确保将RemotingFormat设置为二进制。不确定您是否可以在DataSet上设置它,或者如果您还需要在所有DataTable上设置它。作为一种习惯,我总是把它们都设置为二进制。

根据我的经验,DataTable数据将序列化为比某个相应对象的类似强类型数组更小的大小。

哦,最后一件事。如果可以在不需要它的列上将AllowNull设置为false,则可以节省更多空间。