4

このスレッドを書いているのは、丸 3 日間この問題と戦ったからです!

基本的に、大きな CSV ファイルを収集し、それをローカル SQLCE データベースへの入力として使用するプログラムがあります。この CSV ファイル (ある種のオブジェクトを表し、「犬」と呼びましょう) のすべての行について、この犬がデータベースに既に存在するかどうかを知る必要があります。既に存在する場合は、データベースに追加しないでください。存在しない場合は、データベースに新しい行を追加します。

問題は、すべてのクエリに約 60 ミリ秒かかり (最初はデータベースが空の場合)、データベースが約 1000 行になると最大で約 80 ミリ秒かかることです。1000 行を処理する必要がある場合 (私の意見ではそれほど多くはありません)、これには約 70000 ミリ秒 = 1 分 10 秒かかります (データベースが最新かどうかを確認するためだけに)、遅すぎます! この量がいつか 10000 行を超える可能性があることを考えると、DB が同期されるまでユーザーが 10 分以上待機することは期待できません。代わりにコンパイル済みクエリを使用しようとしましたが、パフォーマンスは向上しません。

検索するフィールドは文字列 (主キー) であり、インデックスが付けられています。

必要に応じて、このスレッドをコードで更新して、私が何をしているかを確認できるようにします。

4

1 に答える 1

3

Windows Phone の SQL CE は最速のクリーチャーではありませんが、最適化できます。

この記事では、実行できる多くのことについて説明します: WP7 ローカル DB のベスト プラクティス

また、ダウンロードできる WP7 プロジェクトを提供しているので、コードをいじることができます。

この記事に加えて、PK を文字列から int に変更することをお勧めします。文字列は int よりも多くのスペースを占有するため、インデックスが大きくなり、分離ストレージからの読み込みに時間がかかります。確かに SQL Server では、文字列の検索は ints/longs の検索よりも遅くなります。

于 2012-10-09T14:52:10.463 に答える