いくつかのNUnitテストをデバッグしているときに、スクリプトファイルを使用してlocaldbにローを挿入するときにメモリリークが検出されました。これはSystem.OutOfMemoryExceptionに至り、開発中に単体テストを実行するのを止めています。localdbでのNUnitテスト中のSystem.OutOfMemoryException
コード次のようになります。
::私たちのクエリ我々は
1) right after entering the inner try/catch
2) is after conn.open
3) is after cmd.ExecuteNonQuery
4) is after the conn.Close in the finally block
私はこれらのヒープの値を取得するコードをステップ実行すると
public static void InsertFromScriptFile (string conString, string dbName, string filePath)
{
using (SqlConnection conn = new SqlConnection(string.Format(conString, dbName)))
{
string script = File.ReadAllText(filePath);
using (SqlCommand cmd = new SqlCommand(script, conn))
{
try
{
conn.Open()
cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
Debug.WriteLine(ex);
throw ex;
}
finally
{
conn.Close();
}
}
}
}
いくつかの行をデータベースに挿入します。 base64文字列としてドキュメントを挿入すると、これらのエラーが発生し始めました。
約10回のテスト後にヒープ内のオブジェクトを検査すると、ドキュメントオブジェクトへの参照だけでなく、成長しているTdsParserStateObjectのように見えます。
は各TestFixture後、私たちはlocaldbをドロップし、新しいものを作成します。私たちはある時点でメモリがgcによって再利用されることを期待しましたが、それは成長を続けています。誰かがなぜメモリが再利用されないのか考えているのですか?
ここにEntity Frameworkはありますか? – Evk
申し訳ありませんが、文言が変更されました。テスト中にefを使用してデータを読み込みます。 – Joalon