我们正在尝试切换将数据序列化为文件的应用程序以使用数据库。这是一个基本的窗体应用程序。
我注意到在我们的应用程序启动时,通过实体框架初始化数据库连接时存在明显的延迟。我不知道是什么原因造成的,我的谷歌技能让我失望了。
我对此进行了 dotTrace 性能分析,结果如下:
性能配置文件显示几乎 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="data.sdf"'"
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();
}
}
}