【问题标题】:Silverlight freezes while loading DomainContext dataSilverlight 在加载 DomainContext 数据时冻结
【发布时间】:2012-04-28 02:59:04
【问题描述】:

问题: 我正在开发一个 Silverlight 应用程序,并且我正在将大量数据加载到 DomainContext 中,即来自 Web 服务。它开始运行几个不同的查询,BusyIndi​​cator 显示当前查询,但是当它到达具有最多数据的查询时,它会冻结。几分钟后,它说服务器没有响应下一个查询。

调试/尝试的解决方案: 当我加载较少的数据时,系统工作。我假设它超时了,这就是为什么它说下一个查询不存在,即它甚至无法联系 Web 服务。我环顾了一会儿,人们建议增加超时和最大结果大小。这些已经解决了其他问题,所以我知道它们有效(即它们正在被应用),但它并没有解决这个问题。

我尝试隔离问题以确保它不是与加载数据无关的其他愚蠢问题。从 Web 服务中的查询函数返回时会出现问题(return result; 下面),即 Web 服务本身应该没有问题。所以两个调试打印都执行了,第二个说 2726 个元素。

网络服务代码:

public IQueryable<Person> GetPeopleWithSubscription()
{
    Debug.WriteLine("Before");
    IQueryable<Person> result = test();
    Debug.WriteLine("After " + result.Count().ToString());
    return result;
}

private IQueryable<Person> test()
{
    return this.ObjectContext.People.Where(p =>
        p.Subscriptions.Count > 0 ||
        p.Subscriptions1.Count > 0 ||
        p.ID < 0);
}

调用代码:

...
_context.Load(_context.GetSubscriptionTypesQuery(), DataLoaded, false);
...

此外,问题似乎出在客户端,因为旧客户端(即问题发生之前)仍然可以与新服务器一起使用。但是,自从问题发生以来,我一直在查看存储库中的差异,但我找不到任何应该有所作为的东西(不是说它不存在)。

谁能帮我解决这个问题?如果您需要更多信息,请告诉我。

【问题讨论】:

    标签: c# .net silverlight web-services ria


    【解决方案1】:

    最近阅读了 WCF 框架的工作原理及其背后的理念。如果您阻止 GUI,Microsoft 不建议专门使用超时时间。他们主张,如果调用需要超过 60 秒才能完成,则可能需要重新设计。您是否考虑过使用分页,我知道这种 ui 模式可能不适用于所有类型的数据,但如果您要加载那么多数据,用户似乎不太可能需要同时查看所有数据。

    几周前我遇到了类似的问题,我们更改了 Web 服务实现以执行使用多线程设计所需的多次插入。这使我们能够将服务的处理时间缩短到 60 秒以下。

    希望对你有所帮助,

    干杯,

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-02
      • 1970-01-01
      相关资源
      最近更新 更多