1

我正在编写一个 WPF 客户端应用程序,使用带有 Sql Compact 版本的 Linq to Sql。db 相对较小 (3MB) 并且是只读的。

底线是性能不如我希望的那么好,我正在寻找提高性能的技巧和实用方法。

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

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

如果需要,我可以提供更多信息。

编辑:

  1. 正如我提到的,数据库是只读的,因此 DataContext 不跟踪更改。
  2. 我们正在对重复查询使用静态查询。问题是当应用程序初始化时,我们将许多对象预取到内存中作为缓存。

谢谢你的帮助。

爱丽儿

4

2 回答 2

1

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

但是,您需要专注于您的设计以支持这一点(否则,您将简单地将性能瓶颈转移到针对 SQL CE 数据库执行的 SQL 语句方面变得过于“喋喋不休”。

DataContext 在跟踪更改时也可能开始膨胀(内存)。您可能需要考虑如何使用数据上下文的方法(例如,您可以将它们附加到新上下文,前提是原始上下文已被释放)。

于 2009-03-26T12:07:03.253 回答
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-网站.aspx

于 2009-03-26T13:16:49.247 回答