提高性能Linq to Sql Compact Edition

时间:2009-03-26 12:00:28

标签: c# performance linq-to-sql optimization sql-server-ce

我正在编写一个WPF客户端应用程序,使用Linq to Sql with Sql Compact edition。 db相对较小(3MB)且只读。

最重要的是,表现不如我希望的那样好,我正在寻找提示和实用的方法来增加它。

更多事实: 该模式包含大约十几个实体,它们之间有广泛的关系。

分析应用程序发现查询运行得非常快,但构建c#实体是花费最多时间的过程(可能长达8秒)。 大多数情况下,我相信因为我们使用了LoadWith,而DataContext别无选择,只能在内存中构建对象图。

如果需要,我可以提供其他信息。

编辑:

  1. 正如我所提到的,db是只读的,因此DataContext不跟踪更改。
  2. 我们正在对重复出现的查询使用静态查询。问题是当应用程序正在初始化时,我们将许多对象预取到内存中以作为缓存。
  3. 感谢您的帮助。

    爱丽儿

2 个答案:

答案 0 :(得分:1)

好吧,您可能会发现使用延迟加载(而不是急切加载)可能有助于提高性能(即避免使用LoadWith),因为实体不需要为关系链分配内存(或者深度加载对象图)相反,它们将按需填充。

但是,您需要专注于您的设计以支持这一点(否则您将简单地移动性能瓶颈,使其对于针对SQL CE数据库执行的SQL语句变得过于“讨厌”。

DataContext在跟踪更改时也会开始膨胀(内存)。您可能需要考虑使用数据上下文的方法(例如,如果已经处理了原始上下文,您可以将它们附加到新的上下文中。)

答案 1 :(得分:0)

一个非常简单的解决方案是使用静态声明的编译linq查询。这当然不是那么实用,但它会提高性能,因为表达式树只需要在编译时构建一次,而不是每次调用查询执行时动态创建。

这可能会有所帮助:

http://msmvps.com/blogs/omar/archive/2008/10/27/solving-common-problems-with-compiled-queries-in-linq-to-sql-for-high-demand-asp-net-websites.aspx