【问题标题】:Silverlight - Unable to load a lot of dataSilverlight - 无法加载大量数据
【发布时间】:2010-01-20 16:25:33
【问题描述】:

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

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

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

谢谢!

【问题讨论】:

    标签: silverlight


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

      您应该考虑到您可能会超出数据源的命令超时时间。例如,LINQ to SQL 的默认值为 30 秒。如果你想增加这个,一个选择是去构造函数并改变它如下:

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

      【讨论】:

        猜你喜欢
        • 2016-02-06
        • 2012-02-11
        • 2013-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-26
        • 2012-11-04
        • 2016-08-24
        相关资源
        最近更新 更多