SQL Serverで使用したときにDapper.netキャッシュを定期的にフラッシュする方法

StackOverflow https://stackoverflow.com/questions/6818258

質問

誰かがこれが何を意味するのかを説明してもらえますか(dapper.netウェブサイトから)

制限と警告

Dapperは、実行するすべてのクエリに関する情報をキャッシュします。これにより、オブジェクトを迅速に実現し、パラメーターをすばやく処理できます。現在の実装は、この情報を同時判決オブジェクトにキャッシュします。保存するオブジェクトは決して洗い流されません。 パラメーターを使用せずにSQL文字列をその場で生成している場合、メモリの問題にヒットする可能性があります。 辞書をLRUキャッシュに変換する場合があります。

太字のラインが何を意味するのか理解できません。 SQL ServerとC#クライアントを使用しています。

誰かがこのメモリの問題を作成するC#コードのサンプルを提供してください。ありがとうございました

役に立ちましたか?

解決

パラメーターを使用せずにSQL文字列をその場で生成している場合、メモリの問題にヒットする可能性があります。

あなたはこれを行うことができます:

cmd.CommandText = "SELECT email, passwd, login_id, full_name " + 
                  "FROM members " +
                  "WHERE email = '" + email + "'";

またはあなたはこれを行うことができます:

string s = "SELECT email, passwd, login_id, full_name " + 
           "FROM members WHERE " +
           "email = @email";
SqlCommand cmd = new SqlCommand(s);
cmd.Parameters.Add("@email", email);

後者はパラメーター化されています。一度キャッシュされます。前者はパラメーター化されていません。そのようなクエリを別の値で書くたびにキャッシュされます email. 。これはあなたの記憶を爆発させます。

後者は非常に優れています。注射攻撃を回避します。ダッパーは一度キャッシュできます。 SQL Serverは、実行計画を一度コンパイルしてキャッシュします。

(必須)既にパラメーター化されたクエリを使用している必要があります。そうでない場合は、していることすべてをドロップし、これをすぐに優先します。

誰かがこのメモリの問題を作成するC#コードのサンプルを提供してください。ありがとうございました

前者をループで行うだけです。あなたの記憶が成長するのを見てください。後者をループで行います。あなたの記憶が成長しないのを見てください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top