SQL Server Compact 4启动 - LoadNativeBinaries慢

时间:2013-08-07 21:06:26

标签: sql-server-ce database-performance

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

我在启动应用程序时注意到,在通过Entity Framework初始化数据库连接时存在明显的延迟。我不知道造成这种情况的原因是什么,我的谷歌技能让我失望。

我在这上面做了一个dotTrace性能配置文件,这就是它显示的内容:

LoadNativeBinaries lag

性能配置文件显示运行LoadNativeBinaries的SQL Server CE差不多14秒。我错过了什么?我如何加快速度?

更新

我创建了一个测试数据库项目并将其部署到我正在测试的设备上。我第一次运行测试程序时,花了大约17秒。在第一次之后,花了不到一秒钟。然后我尝试运行我的实际应用程序,滞后已经消失。我重新安装了我的应用程序,第一次运行应用程序时,花了17秒,但后续运行时间不到一秒钟。这与我原来的问题不同,每次发布需要10秒以上。

我上传了我正在使用here的测试项目。我很好奇其他人是否得到了类似的结果。

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

<?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();
        }
    }
}

2 个答案:

答案 0 :(得分:1)

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

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

1)可由resetting the ACL修复(即使是管理员也可以修复)

  

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

     

icacls * / T / Q / C / RESET

2)可以通过更正代理配置或通过registry key禁用证书撤销列表检查来修复。

  

要禁用CRL检查,请在以下位置创建注册表设置   地点:   HKEY_LOCAL_MACHINE \系统\ CurrentControlSet \服务\ Sstpsvc \参数   该设置必须是名为NoCertRevocationCheck的DWORD值。设置   值为1.

答案 1 :(得分:1)

在您的方案中,这是由从一个平台移动到另一个平台的问题引起的,如下所述:{{3p>