【发布时间】:2009-09-22 19:45:14
【问题描述】:
我一直致力于生成各种图表的 Silverlight 应用程序。它需要一些数字运算以及从数据库中获取大量数据。
对于我的数据库通信,我创建了一个使用 Linq2SQL 的 Web 服务。为了克服我的 Web 服务崩溃的问题,我将数据分块,导致有时需要 3 次 Web 服务调用才能全部获取。
关于这个问题。当获取大量数据时,枚举过程“ToList()”需要好几秒钟,这加起来比预期的加载时间要长。根据 SQL Profiler,我的查询的典型持续时间约为 1500。对于 1000 条记录,ToList() 调用最多可能需要 4 秒,这似乎很极端。
我的主要问题是,有什么办法可以加快这个过程吗?或者也许有更好的方法将大量数据从数据库获取到 silverlight 应用程序?
附加信息:
我的 linq 引用被硬编码到我的数据上下文的部分类中。这是由于一个笨拙的存储过程,它的返回类型不能很好地与 dbml 文件配合使用。
我还创建了一个基本对象,我将它设置为我的对象的返回类型,主要由快速属性定义组成,例如:
public Guid Id {get; set;}
接下来的问题是,在定义 linq 存储过程调用和返回类型时,是否有任何属性可以帮助加快进程,或者我可以将其链接到一个非常基本的对象吗?
【问题讨论】:
-
当您说“枚举最多可能需要 4 秒”时,您到底是什么意思?你有很多地方可能是这里的瓶颈。为了理智起见,我建议您将它们完全分开,以便我们知道发生了什么。
-
对不起,如果我有点罗嗦。我的意思是在我调用我的存储过程之后,我的 ToList() 调用可能需要几秒钟,这似乎有点多。
-
伙计,这段时间创建了多少对象?当您调用 ToList() 时,您是在创建数十个对象还是趋向于数千个对象?
-
我将数据分成 1000 个块。确切地说,我跳过(1000*packetNo).Take(1000).ToList()。最多应该是 1000 个对象。
标签: c# linq silverlight