我已经使用SubSonic 2大约5年了,并且非常喜欢它。但是,在过去的六个月中,我一直在想转移到SubSonic 3或类似的ORM工具的想法。由于我的公司使用了大量Telerik的工具,所以我想尝试OpenAccess。配置完它之后,我认为我要尝试一个极其基本的任务,即使用用户表中的信息(约30条记录)加载RadGrid。

因此,在Grid的OnNeedDataSource事件中,我具有以下内容: 通用标签

构建并运行页面后,它吐出耗时1607毫秒。但是,刷新页面后,它返回为0秒。 (为什么?)

然后我输入SubSonic代码: 通用标签

我第一次运行代码,它说花费了171毫秒。刷新页面后,它报告花费了60-70毫秒。

所以,我的问题是:为什么OA在第一次访问时加载所需的时间要长得多,而在每次刷新页面时加载的加载时间却为零秒?而SubSonic在第一次访问时速度要快得多,但每页刷新大约需要65ms?

如果这是一个“基本”问题,或者我没有充分测试性能,我深表歉意。如果有任何方法可以改进此方法,我将不胜感激任何建议。

谢谢, 安德鲁

有帮助吗?

解决方案

OpenAccess具有一个内部数据库对象,该对象是在您首次创建OpenAcccessContext时创建的。它基本上计算所有默认值,创建高速缓存,初始化其他基础结构对象等。创建后,它将立即存储在内部静态字典中(以connectionID为键)。

创建的所有其他上下文都将使用该内部对象,并且完全没有开销。话虽这么说,1600毫秒有点高,您可能会考虑更改映射类型(xml是最佳的,性能明智)。

一种优化是确保在应用程序启动处理程序中初始化模型。以下代码可以解决问题。 通用标签

编辑:作为后续,它说0毫秒,而实际上不是查询执行时间。查询返回的是一个IQueryable,该IQueryable随后将执行。您必须调用ToList()才能获取真实数据。

其他提示

原因可能是,与在SubSonic中相比,在OpenAccess中打开数据库所花费的时间更长。尝试执行一些琐碎的操作,例如在测量加载时间之前只是为了打开数据库而进行计数。在SubSonic中也是如此。 通用标签

托马斯

不知道这是否是题外话,但是在过去的几年中,我一直在使用SS2和SS3并做出贡献。 我刚刚完成了检修,并在SS2中添加了MsAccessProvider,并在SS2和SS3中添加了Enum生成器(它们已提交并在项目页面上运行)。

我还为SS3编写了自己的缓存框架,该框架允许从任何唯一索引引用的数据库表中自动选择性地缓存数据(作为通用词典)。我能够缓存用于基于模板的网页生成的查找数据,并将响应时间从使用SS3 LINQ查找的大约2分钟缩短到几分之一秒。(我尚未公开发布此内容)

我只是不确定将这些内容发布在哪里,以便引起SS用户的注意。我对未解决问题的来源和结案的承诺恰好产生了零响应。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top