Silverlight - 无法加载大量数据

时间:2010-01-20 16:25:34

标签: silverlight

我有一个具有DataGrid和DataPager的Silverlight应用程序。这些控件的数据源来自数据库。我通过RIA Services访问此数据库。

当我尝试加载所有记录时,收到错误消息: “查询'GetData'的加载操作失败。服务器没有提供有意义的回复;这可能是由于合同不匹配,过早的会话关闭或内部服务器错误引起的。”

通过逐渐限制服务器端结果集的大小,我得出的结论是我收到此错误,因为我的数据集太大了。我的问题是,如何优雅地将大型数据集加载到DataGrid中?我对RIA Services以外的方法持开放态度。

谢谢!

2 个答案:

答案 0 :(得分:1)

首先,如果您有手段并且不需要自己编写此代码,请考虑购买解决您问题的UI组件(找到开源解决方案)。对于这些类型的任务,很有可能其他人已经付出了很多努力来解决像这样的问题。作为参考,Silverlight有一个teleric网格控件和一些演示。

如果你不能买一个组件,这里有一些我见过的方法:

  • 在其中设置寻呼系统 当前页面的数据是 已加载,并且未加载新数据 直到页面切换。您 可能会缓存以前的结果 使这项工作更顺利。
  • 在需要时加载数据,因此当用户向下/向侧面滚动时,一旦到达没有加载数据的单元格,就会加载数据。

最后一个想法是在发送之前在服务器上gzip数据。如果您的瓶颈是传输时间,那么压缩会加快您正在使用的数据类型的速度。

答案 1 :(得分:0)

您应该考虑到可能超出数据源的命令超时。例如,LINQ to SQL的默认值为30秒。如果你想增加它,一个选项是转到构造函数并按如下所示进行更改:

public SomeDataClassesDataContext() : 
                base(global::System.Configuration.ConfigurationManager.ConnectionStrings["SomeConnectionString"].ConnectionString, mappingSource)
        {
            this.CommandTimeout = 1200;
            OnCreated();
        }