C# 实体框架查询在一台服务器上速度慢,但在另一台服务器上速度快

C# 实体框架查询在一台服务器上速度慢,但在另一台服务器上速度快,c#,entity-framework,C#,Entity Framework,我有一个简单的C控制台应用程序,它使用EntityFramework6.1访问SQLServer2008R2数据库。当我在两台不同的服务器上运行此应用程序时,其中一台服务器上的数据库读取时间比另一台服务器上的要长得多,即使它们是从同一个数据库读取的。更具体地说,在速度较慢的服务器上,每个查询需要大约½秒的时间 到目前为止,我得出以下结论: 使用sqlcmd从同一数据库读取数据时,两台服务器上的性能相似。因此,网络性能不是问题。 这两台服务器都运行Windows Server 2008 R2和.N

我有一个简单的C控制台应用程序,它使用EntityFramework6.1访问SQLServer2008R2数据库。当我在两台不同的服务器上运行此应用程序时,其中一台服务器上的数据库读取时间比另一台服务器上的要长得多,即使它们是从同一个数据库读取的。更具体地说,在速度较慢的服务器上,每个查询需要大约½秒的时间

到目前为止,我得出以下结论:

使用sqlcmd从同一数据库读取数据时,两台服务器上的性能相似。因此,网络性能不是问题。 这两台服务器都运行Windows Server 2008 R2和.NET 4.5.1。此外,由于这个问题,我研究了netsh int tcp show global显示的网络设置与后者相同。 app.config和SQL Server Profiler中启用的实体框架日志显示,在将生成的SQL查询发送到SQL Server之前,慢速服务器上会出现½秒的延迟。 只有当实体框架查询包含编译时未知的参数时,才会发生延迟,即dbContext.SomeDbSet.where=>e.Id==5很快,因为5在编译时已知,而dbContext.SomeDbSet.where=>e.Id==Id,因为变量Id在编译时未知。这表示每次都从头开始生成参数化查询。
有什么建议吗?非常感谢。

两台服务器上的硬件是否相同?您是否多次尝试运行查询?当linq to sql查询有一个参数时,它的缓存方式与常量不同,可能缓存方式不同。否。实体框架运行缓慢的服务器是一台物理机,而另一台是虚拟机。我非常确信物理服务器的硬件实际上更快。但是,我们可以忽略硬件,因为大约三个月前Entity Framework在两台服务器上的性能都很好。@Paul:是的,在进行性能比较时,我运行完全相同的参数化查询,参数也相同25次。当然,在速度足够快的机器上,您会期望虚拟/内存系统更快,因为它都在内存中,也许您可以构建另一个虚拟机并在那里进行测试。。。真正的问题是,当两台机器之间有太多的差异时,你无法准确地比较它们。