【问题标题】:Too slow open connection to SQL Server on the first application startup在第一次应用程序启动时打开与 SQL Server 的连接太慢
【发布时间】:2011-02-05 10:17:12
【问题描述】:

在我的 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=&quot;Data Source=.\SQLEXPRESS;Initial Catalog=DB;Integrated Security=True;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" />
    </connectionStrings>

我的问题是小型基本 WPF 应用程序(300 kb 可执行文件,无需大量计算)建立与本地 SQL Server 的连接大约 10-13 秒的正常行为吗?

我想,我的硬件不是那么现代,但是,无论如何,10 秒……

您能否提出一些解决方案来提高与 SQL Server 的首次连接的性能?

附:经过长时间的第一次连接程序工作正常并且没有一些性能问题。

【问题讨论】:

  • 你的SQL服务器能上网吗?

标签: sql-server wpf performance database-connection ado.net-entity-data-model


【解决方案1】:

我知道在使用 SQL Server 的 WCF 上的 n 层应用程序中存在这种“性能不佳”的行为。虽然 10-13 秒真的很烦人而且非常极端。我所做的是启动与 WCF 服务的连接,然后将 SQL Server 连接转换为对 WCF 服务的虚拟调用,并在启动画面中使用 SQL Server 选择查询(使用 EF)。

这样最终用户就不会遇到这种首次启动延迟。当最终用户真正想要查看/获取数据时,应用程序会做出响应。

虽然这实际上并不能“解决你的问题”,但它是一个很好的解决方法/掩盖;)

【讨论】:

    【解决方案2】:

    这在很大程度上取决于模型的复杂性;如果它相当复杂,为其生成视图可能会导致一些延迟。您可以在构建时预先生成视图,如 here 所述。

    【讨论】:

    • 我根本不使用 vviews,我的 ERD 只包含 13-15 个表、3NF 规范化和 M:N 等基本关系。如果我在这种情况下使用视图,这会提高性能吗?谢谢。
    • 我不相信 Alex 是在谈论 SQL Server 的“视图”。如果您使用的是 EF,则您正在使用“视图”阅读链接,并尝试预先生成您的视图 - 它应该有助于您的性能。
    • 但是伙计们,在“简单情况”下 10-13 秒的表现意味着正在发生不同的事情......
    猜你喜欢
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多