在我的WPF4桌面应用程序中,我通过ADO.NET实体数据模型(edmx)使用与SQL Server 2008 R2的连接,我注意到,当我第一次启动应用程序(冷启动)时需要很长时间(约10秒)直到应用程序建立(打开)连接到DB并且可以执行基本的LINQ查询(没有连接,表格真的很小)并在DataGrid
控件中显示结果。
SQL Server 2008 R2安装在我的本地PC上,因此网络负载没有问题。
我构建SQL连接的方式(在外部线程中):
public static DBEntities dbContext = new DBEntities();
dbContext.Connection.Open();
连接配置:
<connectionStrings>
<add name="DBEntities" connectionString="metadata=res://*/DBModel.csdl|res://*/DBModel.ssdl|res://*/DBModel.msl;provider=System.Data.SqlClient;provider connection string="Data Source=.\SQLEXPRESS;Initial Catalog=DB;Integrated Security=True;MultipleActiveResultSets=True"" providerName="System.Data.EntityClient" />
</connectionStrings>
我的问题是,小型基本WPF应用程序(300 kb可执行文件,没有大量计算)的正常行为与本地SQL Server建立连接大约10-13秒?
我想,我的硬件不是那么现代,但无论如何,10秒......
你能否提出一些解决方案来提高第一次连接SQL Server的性能?
附:经过长时间的第一次连接程序工作正常,并没有一些性能问题。
我知道在使用SQL Server的WCF上的n层应用程序中的这种“性能不佳”行为。虽然10-13秒真的很烦人且非常极端。我所做的是启动与WCF服务的连接,从而将SQL Server连接转换为对具有SQL Server选择查询(使用EF)的WCF服务的虚拟调用到启动画面中。
这样终端用户就不会遇到第一次启动延迟。当最终用户实际想要查看/获取数据时,应用程序是响应的。
虽然这实际上并没有“解决你的问题”,但这是一个很好的解决方法/掩盖;)
这在很大程度上取决于模型的复杂性;如果它相当复杂,为它生成视图可能会导致一些延迟。您可以在构建时预先生成视图,如here所述。