1

データをファイルにシリアル化するアプリケーションを、データベースを使用するように切り替えようとしています。これは基本的な Windows フォーム アプリケーションです。

アプリケーションの起動時に、Entity Framework を介してデータベース接続を初期化するときに大きな遅延があることに気付きました。何が原因なのかわからず、Google のスキルが足りません。

これについて dotTrace パフォーマンス プロファイルを実行したところ、次のようになりました。

LoadNativeBinaries ラグ

パフォーマンス プロファイルは、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=&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

使用中の OS プラットフォーム (OS およびサービス パック) は?

これは通常、1) RSA 証明書フォルダー内の無効なアクセス制御リスト、または 2) 無効なインターネット プロキシ構成のいずれかが原因で発生します。

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

あなたのシナリオでは、これは、ある paltform から別の paltform への移動の問題が原因で発生します。 -from-one-platform-to-other-the-first-sqlceconnection-open-takes-more-time.aspx

于 2013-08-12T15:43:43.530 に答える