【问题标题】:Entity framework connection timeout performance issues实体框架连接超时性能问题
【发布时间】:2015-08-14 19:21:33
【问题描述】:

请原谅任何明显的错误/误解!我是新人!

我正在创建一个简单的 c# Winforms 应用程序,使用实体框架 6 连接到 sql azure 数据库,代码优先。开发平台为VS2015社区版。

表单会加载带有记录 ID/名称的组合框以供选择。

通过组合框 I 选择记录时:

1) 创建一个新的上下文(首先处理先前的上下文)

2) 加载数据图

3) 填充表单

4) 允许用户更改

5)(根据用户命令)保存更改/处理上下文

我的问题是,如果我使用组合框选择记录,则填充数据的查询会在大约 30-40 毫秒内运行(根据调试信息)。这在我忙于选择记录时有效。

但是,如果我让表单无人看管 30 秒,然后选择一条记录,则完全相同的查询需要 500 毫秒的区域。相同的数据,连接字符串,一切。一定有我不知道的连接问题。半秒不是很长,但很明显,我觉得我应该明白为什么。

我将连接和命令超时属性设置为较大的值,但结果相同。

我的 Azure 数据库是 S1 层。

我的连接字符串是 "服务器=tcp:*****.windows.net,1433;数据库=*****;用户 ID=*******;密码=******;Trusted_Connection=False ;Encrypt=True;Connection Timeout=1200;multipleactiveresultsets=true" providerName="System.Data.SqlClient" />

我正在使用 SqlAzureExecutionStrategy。

我的客户端计算机是运行 windows 10 pro 的 i7 4Ghz/16GB Ram/SSD。

非常感谢您的帮助。谢谢。

Code sample:
private void LoadRecord(int intID)
{
ResetContext();
var graph = _Context.CareCoordinators
.Where(c => c.CareCoordinatorId.Equals(intID))
.Include("DefaultAreas")
.Include("Branch")
.ToList();
_Subject = graph[0];
}

【问题讨论】:

  • 你用的是什么代码?
  • 抱歉,您需要哪一点代码?查询是 private void LoadRecord(int intID) { ResetContext(); var graph = _Context.CareCoordinators .Where(c => c.CareCoordinatorId.Equals(intID)) .Include("DefaultAreas") .Include("Branch") .ToList(); _主题=图[0]; }
  • 可能的原因有很多。连接会在 30 秒后关闭吗?数据库引擎预留多少内存?等等。
  • @TonyLodge 将代码示例编辑为代码块,而不是 cmets。
  • @TonyLodge ResetContext() 做什么?

标签: c# entity-framework azure


【解决方案1】:

在你使用它之后处理你的上下文,而不是在你创建一个新的之前。这可能是占用您时间的原因。

类似下面的内容应该会有所帮助:

private void LoadRecord(int intID)
{
    using (Context context = new Context())
    {
        var graph = context.CareCoordinators
        .Where(c => c.CareCoordinatorId.Equals(intID))
        .Include("DefaultAreas")
        .Include("Branch")
        .ToList();
        _Subject = graph[0];
    }
}

很遗憾,由于您没有提供 ResetContext() 方法的代码,因此我无法更具体。

【讨论】:

  • 如果上下文以这种方式处理,它如何跟踪和保存用户所做的更改? (对不起,如果我的理解有根本性的损失)。此外,如果您无间隔地调用此方法 x 次,则执行时间为 40 毫秒,但只有在方法调用之间存在延迟时,才会显示 500 毫秒的执行时间。顺便感谢您的宝贵时间! :)
  • 备注:在using块中使用本地上下文引用而不是_Context。
  • @Patrick 感谢您向我指出这一点 - 之前忽略了它。
  • @TonyLodge - 我注意到保留的上下文越长,它们越慢,尤其是对于插入、更新和删除。
  • 似乎我可能不得不回到书本上,但很快不会_Subject然后断开连接吗?它将如何被保存?创建一个新的上下文并重新附加?谢谢
猜你喜欢
  • 2014-05-11
  • 2011-11-16
  • 2011-12-14
  • 2016-03-09
  • 1970-01-01
相关资源
最近更新 更多