Linq to Sql CompiledQuery引用了DataContext

时间:2016-03-29 09:06:41

标签: c# .net linq linq-to-sql compiled-query

在我们基于.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

我的问题是,有没有任何已知的方法来规避这个问题?这是一个问题,除了用未使用的数据上下文填充内存?

0 个答案:

没有答案
相关问题