我有一个位于纽约的数据库,我的HK用户正试图从这个数据库中获取数据。检索到的数据大约为20 MB(如果将Datatable保存为csv,则文件大小为20 mb)。数据大约需要20分钟。
我使用SQL Server 2005作为数据库,使用c#作为桌面应用程序。由于预算限制,我无法为HK用户提供单独的数据库。
有人可以建议一种方法将检索时间缩短到5分钟左右吗?
此致
Pavan
答案 0 :(得分:1)
一些想法;
答案 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,则可以节省更多空间。