Orm Telerik OpenAccess与亚音速在简单速度测试中的对比(不是“哪个更好”)

Orm Telerik OpenAccess与亚音速在简单速度测试中的对比(不是“哪个更好”),orm,subsonic,subsonic2.2,openaccess,telerik-open-access,Orm,Subsonic,Subsonic2.2,Openaccess,Telerik Open Access,我已经使用亚音速2~5年了,我很喜欢它。然而,在过去的六个月里,我一直在玩弄转移到亚音速3或类似ORM工具的想法。由于我的公司使用了大量Telerik的工具,我想我应该试试OpenAccess。在完成配置后,我想我应该尝试一项极其基本的任务,从用户表(约30条记录)加载一个RadGrid 因此,在网格的onnedDataSource事件中,我有以下内容: var start = System.Environment.TickCount; context = new EntitiesModel()

我已经使用亚音速2~5年了,我很喜欢它。然而,在过去的六个月里,我一直在玩弄转移到亚音速3或类似ORM工具的想法。由于我的公司使用了大量Telerik的工具,我想我应该试试OpenAccess。在完成配置后,我想我应该尝试一项极其基本的任务,从用户表(约30条记录)加载一个RadGrid

因此,在网格的onnedDataSource事件中,我有以下内容:

var start = System.Environment.TickCount;
context = new EntitiesModel();
rgUsers.DataSource = (from u in context.Users select u);
var stop = System.Environment.TickCount;
var elapsed = stop - start;
litTelerik.Text = string.Format("This process took <b>{0}</b> milliseconds", elapsed);
var start=System.Environment.TickCount;
上下文=新的EntitiesModel();
rgUsers.DataSource=(来自上下文中的u。用户选择u);
var stop=System.Environment.TickCount;
var运行=停止-启动;
litTelerik.Text=string.Format(“此过程花费了{0}毫秒”,已过);
在构建并运行该页面后,它返回1607毫秒。然而,刷新页面后返回0秒。(为什么?)

然后我输入亚音速代码:

var start = System.Environment.TickCount;
rgUsers.DataSource = new UserCollection().Load();
var stop = System.Environment.TickCount;
var elapsed = stop - start;
litTelerik.Text = string.Format("This process took <b>{0}</b> milliseconds", elapsed);
var start=System.Environment.TickCount;
rgUsers.DataSource=newusercollection().Load();
var stop=System.Environment.TickCount;
var运行=停止-启动;
litTelerik.Text=string.Format(“此过程花费了{0}毫秒”,已过);
我第一次运行代码时,它说需要171毫秒。刷新页面后,它报告需要60-70毫秒

所以,我的问题是:为什么OA在第一次访问时加载要花费相当长的时间,而在每次页面刷新时加载要花费零秒?而亚音速在第一次访问时要快得多,但每次刷新页面需要约65毫秒

如果这是一个“基本”问题,或者我没有充分测试性能,我深表歉意。如果有什么方法可以改进这个方法,我将非常感谢你的建议

谢谢,
Andrew

原因可能是在OpenAccess中打开数据库比在亚音速中打开数据库需要更长的时间。尝试执行一个简单的操作,比如在测量加载时间之前获取一个打开数据库的计数。在亚音速也同样如此

context = new EntitiesModel();
context.Users.Count();
var start = System.Environment.TickCount;
rgUsers.DataSource = (from u in context.Users select u);
var stop = System.Environment.TickCount;
var elapsed = stop - start;
litTelerik.Text = string.Format("This process took <b>{0}</b> milliseconds", elapsed);
context=newentitiesmodel();
context.Users.Count();
var start=System.Environment.TickCount;
rgUsers.DataSource=(来自上下文中的u。用户选择u);
var stop=System.Environment.TickCount;
var运行=停止-启动;
litTelerik.Text=string.Format(“此过程花费了{0}毫秒”,已过);

Thomas

OpenAccess有一个内部数据库对象,它是在您第一次创建OpenAccessContext时创建的。它基本上计算所有默认值、创建缓存、初始化其他基础结构对象等。。一旦创建它,它就存储在内部静态字典中(connectionID是键)

创建的每个其他上下文都将使用该内部对象,并且不会有任何开销。据说1600毫秒有点高,你可以考虑改变映射类型(XML是最佳的,性能明智的)。 一种优化方法是确保在应用程序启动处理程序中初始化模型。下面的代码应该可以做到这一点

void Application_Start(object sender, EventArgs e)
{
    var modelInfo = new EntitiesModel().Metadata;
}

编辑:作为后续,它表示0毫秒,而这实际上不是查询执行时间。查询返回的是稍后执行的IQueryable。您必须调用ToList()才能获得真实数据

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

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


我只是不知道在哪里张贴这些东西,以获得SS用户的注意。我对来源的承诺和未解决问题的结案都没有得到任何回应。

谢谢。这是有道理的。我按照你的建议做了,第一次加载下降到900毫秒。我很想了解更多。你在github上的用户名是什么?或者我如何与你联系?我是6pac。您可以在GitHub亚音速源上看到提交和注释。(抱歉耽搁了一周的假期)博客文章如下: