Ubuntu 14.04のDockerコンテナで.NET Core 1.1 APIを実行しています。 APIがEFコアを介してさまざまなSQL Serverデータベースとやりとりしているのは、データベース接続がクリーンアップされておらず、再利用されていないということです。 sp_who2クエリを使用して、データベース上の何千もの接続をすばやく確認しています。.NET Core APIがデータベース接続をクリーンアップするにはどうすればよいですか?
- すべての接続は同じ接続文字列で作成されるため、接続プールが機能するはずです。
- 接続のLastBatch時間は更新されないため、プールされていると予想されるので、再利用されているようには見えません。
- データベースを呼び出すオブジェクトは、
Scoped
ライフサイクルで定義されているため、各セッションの後にクリーンアップする必要があります。 - Hibernating Rhinos EF Profilerは、DbContextsがEF内で一貫してクリーンアップされていることを示しています。
- データベースにアクセスするたびに接続数が増加することはないため、特定のコードである可能性があります。
- 私たちのテストによると、IISやIIS Expressの下でWindowsを実行しているときはこれが起こらないので、DockerやUbuntuに固有のようです。
これは.NETコアで設計されていますか?または、私たちはトリックを逃していますか? EFに接続のクリーンアップを強制するにはどうすればよいですか?
これは非常に素晴らしいストーリーですが、コードを表示していないかどうかを知るためにはどうすればよいでしょうか? [mcve]を作成してください。 –
@ ZoharPeled - 一般的に私はこれに同意し努力していますが、この場合は単純に不可能でした。それは再現しにくい可能性のある原因の数が多い問題でした。それを経験していた。あなたがUbuntuで作業している人が多いので、ほとんどの人が「これはうまくいく」と言っていたはずです。 – Peter
非常に良い。あなたの答えをアップアップしました。 –