0

.NET 4.6 に基づくバックエンド アプリでは、多くの Linq To Sql コンパイル済みクエリを使用します。dotMemory を使用してアプリケーションを分析したところ、クエリが最初にコンパイルされた (現在は破棄された) DataContext への参照が含まれていることがわかりました。この参照は消えることはないようです。

クエリ自体は複雑ではありません。次に例を示します。

private static readonly Func<DataContext, int, IQueryable<bool>> _IsEditingAllowed_Anmeldung_CompiledQuery =
  CompiledQuery.Compile((DataContext db, int id) =>
      db.GetTable<PersonenAnmeldung>()
        .Where(p => p.Id1 == id)
        .Select(p => p.Status.AllowEdit));

このようなクエリの最短パスは次のとおりです。

DataContext の保持パス

Static reference: StatusLogic._IsEditingAllowed_Anmeldung_CompiledQuery ->
Func<DataContext, Int32, IQueryable<Boolean>>._target ->
CompiledQuery.compiled ->
SqlProvider+CompiledQuery.queryInfos ->
SqlProvider+QueryInfo[1] at [0] ->
SqlProvider+QueryInfo.query ->
SqlSelect.selection ->
SqlColumnRef.sourceExpression ->
MethodCallExpressionN._arguments ->
TrueReadOnlyCollection<Expression>.list ->
Expression[2] at [0] ->
LinkedTableExpression.table ->
Table<Status>.context ->
DataContext

私の質問は、この問題を回避する既知の方法はありますか? 使用されていないデータコンテキストでメモリがいっぱいになる以外に、それはまったく問題ですか?

4

0 に答える 0