データをファイルにシリアル化するアプリケーションを、データベースを使用するように切り替えようとしています。これは基本的な Windows フォーム アプリケーションです。
アプリケーションの起動時に、Entity Framework を介してデータベース接続を初期化するときに大きな遅延があることに気付きました。何が原因なのかわからず、Google のスキルが足りません。
これについて dotTrace パフォーマンス プロファイルを実行したところ、次のようになりました。
パフォーマンス プロファイルは、SQL Server CE でLoadNativeBinaries
. 私は何が欠けていますか?これをスピードアップするにはどうすればよいですか?
アップデート
テスト データベース プロジェクトを作成し、テストしているデバイスに展開しました。初めてテスト プログラムを実行したときは、約 17 秒かかりました。1回目以降は1秒もかかりませんでした。次に、実際のアプリケーションを実行してみましたが、ラグはなくなりました。アプリケーションを再インストールしたところ、最初にアプリケーションを実行したときは 17 秒かかりましたが、その後の実行には 1 秒もかかりませんでした。これは、起動するたびに 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();
}
}
}