dapper.net、どのようにConcurrentDictionaryをフラッシュする?

concurrentdictionary dapper

質問

私は新しいプロジェクトにそれを使用することを大胆にして計画しています。それを読んだ後、私はConcurrentDictionaryしかないかもしれない唯一の問題のようです。

Dapperは、実行するすべてのクエリに関する情報をキャッシュします。これにより、オブジェクトを素早くマテリアライズし、パラメータを素早く処理できます。現在の実装は、この情報をConcurrentDictionaryオブジェクトにキャッシュします。格納するオブジェクトは決してフラッシュされません。パラメータを使用せずにSQL文字列を生成する場合、メモリの問題が発生する可能性があります。ディクショナリをLRUキャッシュに変換することがあります。

どうすればこの問題を回避できますか?誰かが私に何かコードを表示して、それをどのようにしていつフラッシュするか教えてもらえますか?

受け入れられた回答

上のコメントごとに、オンザフライの例があります:

var builder = new StringBuilder();
builder.AppendLine("SELECT Foo FROM Bar");
if (fisrtName != null || lastName != null)
    builder.AppendLine("WHERE");
if (firstName != null)
    builder.AppendLine("    Bar.FirstName = @Firstname");
if (firstName != null && lastName != null)
    builder.Append(" AND");
if (lastName != null)
    builder.AppendLine("    Bar.LastName = @LastName");
var sql = builder.ToString();

ご覧のとおり、dapperが実行する実際のSQLは、 firstNameおよび/またはlastNameがnullかどうかによって異なります。両方がnullの場合、1つのSQL文字列が取得されます。 firstNameだけがnullでない場合、別のfirstNameを取得します。 lastNameだけがnullでない場合、あなたはまだ別のものを取得します。最後に、両方がヌルでない場合、4番目の順列が得られます。

これは「オンザフライ」の意味です.Dapperはこれらのユニークな順列に基づいてキャッシュします。より複雑なシナリオを考えれば、非常に多くの異なる順列でどのように終わるのかを簡単に知ることができます。そのうちの1つを独立してキャッシュする必要があります。



ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow