1

我们正在尝试切换将数据序列化为文件的应用程序以使用数据库。这是一个基本的窗体应用程序。

我注意到在我们的应用程序启动时,通过实体框架初始化数据库连接时存在明显的延迟。我不知道是什么原因造成的,我的谷歌技能让我失望了。

我对此进行了 dotTrace 性能分析,结果如下:

LoadNativeBinaries 滞后

性能配置文件显示几乎 14 秒的 SQL Server CE 运行LoadNativeBinaries. 我错过了什么?我该如何加快速度?

更新

我创建了一个测试数据库项目并将其部署到我正在测试的设备上。我第一次运行测试程序大约需要 17 秒。第一次之后,不到一秒钟。然后我尝试运行我的实际应用程序,滞后消失了。我重新安装了我的应用程序,第一次运行应用程序需要 17 秒,但随后的运行只用了不到一秒。这与我最初的问题不同,每次启动都需要 10 多秒。

我已经上传了我在这里使用的测试项目。我很好奇是否有其他人得到类似的结果。

以下是我正在使用的配置文件

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <connectionStrings>
        <add name="dataEntities" connectionString="metadata=res://*/data.csdl|res://*/data.ssdl|res://*/data.msl;provider=System.Data.SqlServerCe.4.0;provider connection string='Data Source=&quot;data.sdf&quot;'"
            providerName="System.Data.EntityClient" />
    </connectionStrings>
  <system.data>
    <DbProviderFactories>
      <remove invariant="System.Data.SqlServerCe.4.0"/>
      <add name="Microsoft SQL Server Compact Data Provider 4.0" invariant="System.Data.SqlServerCe.4.0" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=4.0.0.1, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
    </DbProviderFactories>
  </system.data>
</configuration>

和测试程序:

using System.Data;
using System.Data.Entity;
using System.Data.SqlServerCe;
using System.Data.EntityClient;

namespace databaseTest
{
    public partial class Form1 : Form
    {
        public string _connectionString;

        public Form1()
        {
            InitializeComponent();
            Configuration exeConfig = ConfigurationManager.OpenExeConfiguration("databaseTest.exe");
            _connectionString = exeConfig.ConnectionStrings.ConnectionStrings["dataEntities"].ConnectionString;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Stopwatch st = new Stopwatch();
            st.Start();
            EntityConnection ec = new EntityConnection(_connectionString);
            dataEntities ent = new dataEntities(ec);
            st.Stop();

            connectionTime.Text = st.Elapsed.ToString();
        }
    }
}
4

2 回答 2

1

正在使用什么操作系统平台(操作系统和服务包)?

这通常是由 1) RSA 证书文件夹中的无效访问控制列表或 2) 无效的 Internet 代理配置引起的。

1)可以通过重置 ACL来修复(即使管理员也无法使用)

要重置所有文件权限,请键入:

icacls * /T /Q /C /RESET

2)可以通过更正代理配置或通过注册表项禁用证书吊销列表检查来修复。

要禁用 CRL 检查,请在以下位置创建注册表设置:HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Sstpsvc\parameters 该设置必须是名为 NoCertRevocationCheck 的 DWORD 值。将值设置为 1。

于 2013-08-08T09:06:11.387 回答
1

在您的场景中,这是由从一个平台移动到另一个平台的问题引起的,如下所述:http: //blogs.msdn.com/b/sqlservercompact/archive/2009/04/01/after-moving-the-database -从一个平台到另一个第一个 sqlceconnection-open-takes-more-time.aspx

于 2013-08-12T15:43:43.530 回答