2012-03-14 16 views
0

私は基本的に、アイテムがデータベースに存在するかどうかをチェックするときに、より効率的なパフォーマンスの方法がどちらであるかを判断しようとしています。アイテムがSQL Server CEに存在するかどうかを確認する最も良い方法は?

SQL Server CEでWP7でLINQ to SQLを使用しています。

データベースに複数のオブジェクトをインポートしようとしています。これらのオブジェクトのいくつかは既にデータベースに存在する可能性が非常に高いので、各アイテムが入ってきたらチェックする必要があります。スキップしている場合はスキップし、そうでない場合は追加します。

2つのアプローチが考えられました。音はかなり資源集約かかわらDBへの個々の呼び出しを作る

foreach(var item in items) 
{ 
    //Make individual call to db for every item 
    var possibleItem = /*SQL SERVER STATEMENT WITH WHERE CONDITION*/; 
} 

:最初は、foreachのを使用して、オブジェクトが同じ名前のDBに存在するかどうかをチェックしました。したがって、もう1つのアイデアは、db内のすべてのオブジェクトを完全に選択してリストに格納することでした。そして、私はdbに接続する必要はありませんが、私はリストに直接アクセスできるようになりました。これらのアプローチについてのあなたの考えは何ですか?より良い方法がありますか?

+0

疑問があるときに試してみてください - 通常、あなたはforeachを行う必要がないように物事を変えようとする必要があります。ほとんどの場合、Whereと、このクエリに基づいてforeachを行うことができます。 )しかし、コードなしであなたは言うことができません。しかし、私はSqlCeがメモリ内でインデックス作成を行うので、リスト(O(n)のクエリパフォーマンスが悪い)に基づいてより遅くなるべきではないと考えています – Carsten

答えて

0

アイテムを簡単に並べ替えることができる場合は、データベースから選択し、データベースを読み込んでいる間にステップを実行して、新しいアイテムがどれかを判断することができます。それはメモリを保持しながら、複数選択よりはるかに高速でなければなりません。

using(var reader = cmd.ExecuteReader()) 
{ 
    while(reader.HasRows && reader.Read()) 
    { 
    var id = reader.GetInt32(0); 
    // test how id compares to the memory list 
    } 
} 

しかし、メモリが問題でなければ、簡単にするために、データベースからすべてのキーをメモリに読み込んでいるだけです。

+0

これはモバイルアプリなのでメモリはキーですここで問題を起こす。私はあなたがデータベースを読んでいる間にリストを踏んでいくことが何を意味するのか分かりません。私はこれが可能であることを知らなかった。あなたはどうやってそれをしますか? – loyalpenguin

+0

コマンドオブジェクトにdatareaderを使用する簡単な例を追加しました。 Imは電話ですぐに使えるので、フォーマットがうまくいかない場合はごめんなさい。 –

+0

wp7の権利はありませんか? –

関連する問題