- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
使用EntityFramework减少SQLAzure的网络延迟
数据点
使用 Entity Framework 减少 SQL Azure 的网络延迟
HYPERLINK /magazine/ee532098.aspx?sdmr=JulieLermansdmi=authors Julie Lerman
从本地管理的 SQL Server 数据库切换到 Microsoft 基于云的 SQL Azure 数据库乍一看有些困难, 实际上却易如反掌:只需切换连接字符串,便大功告成! 正如我们这些开发人员在类似情况下愿意看到的那样,这种方法“确实行得通”。
但是,进行这种切换会引入网络延迟,进而大大影响应用程序总体性能。 幸运的是,充分了解网络延迟的影响将有利于您在 SQL Azure 环境中使用 Entity Framework 降低这种影响。
分析数据访问代码
我使用 Visual Studio 2010 探查器工具 ( HYPERLINK /library/ms182372 /library/ms182372) 对本地网络和 SQL Azure 帐户中的 AdventureWorksDW 数据库的不同数据访问活动进行了比较, 并使用该探察器研究了使用 Entity Framework 从数据库中加载一些客户的调用。 一个测试只查询客户,事后再通过 Entity Framework 4.0 的延迟加载功能检索客户销售信息。 后面一个测试使用 Include 方法随客户预先加载客户销售数据。 图 1 显示了我用来执行这些查询并枚举结果的控制台应用程序。
图 1:旨在探索性能的查询
??????????{
?
??using?(var?context?=?new?AdventureWorksDWEntities())
?
??{
?
????var?warmupquery?=?context.Accounts.FirstOrDefault();
?
??}
?
??DoTheRealQuery();
?
}
?
?
?
private?static?void?DoTheRealQuery()
?
{
?
??using?(?var?context=new??AdventureWorksDWEntities())
?
??{
?
????var?query?=???context.Customers.Where(c?=?c.InternetSales.Any()).Take(100);
?
????var?customers?=?query.ToList();
?
????EnumerateCustomers(customers);
?
??}
?
}
?
?
?
private?static?void?EnumerateCustomers(ListCustomer?customers)
?
{
?
??foreach?(var?c?in?customers)
?
??{
?
????WriteCustomers?(c);
?
????
?
??}
?
}
?
?
?
private?static?void?WriteCustomer(Customer?c)
?
{
?
??Console.WriteLine
?
?(CustomerName:?{0}?First?Purchase:?{1}??#?Orders:?{2},
?
????c.FirstName.Trim()?+??+?c.LastName,??c.DateFirstPurchase,?c.InternetSales.Count);
?
}
????????
首先执行一个热身查询,目的是消耗掉将实体数据模型 (EDM) 元数据加载到内存中、预编译视图以及其他一次性操作的成本。 然后,DoTheRealQuery 方法会查询 Customers 实体的子集,将查询结果放入一个列表并枚举结果。 在枚举期间将访问客户的销售数据,在此示例中,这会强制延迟加载功能返回数据库以通过迭代获取每个客户的销售数据。
查看本地网络中的性能
在本地网络中针对内部部署的 SQL Server 数据库运行此代码时,执行查询的第一次调用用时 233 毫秒。 用时不多,原因是我只检索了客户。 当代码运行强制延迟加载的枚举时,将用时 195 毫秒。
现在,我将更改查询,使其随 Customers 预先加载 InternetSales:
??????????context.Customers.Include(InternetSales).Where(c?=?c.InternetSales.Any()).Take(100);
????????
现在,将从数据库中返回这 100 个客户及其全部销售记录。 其中包含的数据要多很多。
现在,q
文档评论(0)