gpt4 book ai didi

c# - EF 6 连接池和存储的查询字符串 RAM 泄漏

转载 作者:行者123 更新时间:2023-12-03 20:56:37 25 4
gpt4 key购买 nike

我有2个问题。

第一个是连接池和(OracleConnectionImpl)随着时间的推移稳步增长,直到它达到内存异常。正如您在图像上看到的,它在运行 3-4 小时后有 90 MB。

我到处都在使用短暂的上下文,但它一直在增长并且永远不会自行清除。有什么办法让我清除吗?

第二个是 EF 随着时间的推移存储了太多重复的字符串查询。
它主要存储来自 .Reload() 函数的那些,因为它没有参数化,它将 ID 硬编码到查询中。
然后有像“ID”这样的字符串,它被缓存在 2947x 的某个地方。

.Reload() 函数有什么方法可以使其参数化,或者清除所有存储的字符串?

这个应用程序每隔几秒钟刷新一次仓库作业和托盘,以使其与所有机器保持同步,由于 WPF 绑定(bind),我不知道比 .Reload() 更好的方法。

dotMemory Snapshot

String duplicates

编辑 1

我有一个简单的辅助函数,可以一次重新加载许多实体,甚至是一个扩展。将它作为对象传递并不重要,因为即使在最后一个示例中仍然存在相同的问题。

     public static void ReloadEntities(bool dispatch, params IEnumerable<object>[] entities)
{
using (var ctx = new eWMSEntities())
{
if (dispatch)
{
Application.Current.Dispatcher.Invoke(DispatcherPriority.Background, (SendOrPostCallback)delegate
{
entities.SelectMany(x => x.Select(s => s)).ToList().ForEach(entity =>
{
ctx.Set(entity.GetType()).Attach(entity);
ctx.Entry(entity).Reload();
ctx.Entry(entity).State = EntityState.Detached;
});
}, null);
}
else
{
entities.SelectMany(x => x.Select(s => s)).ToList().ForEach(entity =>
{
ctx.Set(entity.GetType()).Attach(entity);
ctx.Entry(entity).Reload();
ctx.Entry(entity).State = EntityState.Detached;
});
}
ctx.Dispose();
}
}

public static void ReloadEntity(this object entity, bool dispatch)
{
using (var ctx = new eWMSEntities())
{
ctx.Set(entity.GetType()).Attach(entity);
if (dispatch)
{
Application.Current.Dispatcher.Invoke(DispatcherPriority.Background, (SendOrPostCallback)delegate
{
ctx.Entry(entity).Reload();
}, null);
}
else
{
ctx.Entry(entity).Reload();
}
ctx.Entry(entity).State = EntityState.Detached;
ctx.Dispose();
}
}

    while (true && JobLines.Contains(line))
{
using (var ctx = new eWMSEntities())
{
ctx.T_JOB_LINES.attach(line);
ctx.entry(line).Reload();
}
await Task.Delay(3000);
}

这是运行 3 天后的快照
Snapshot

最佳答案

我不推荐,但如果没有其他解决方案......
也许你可以试试

GC.Collect();

让系统强制收集你内存中不重要的东西。

关于c# - EF 6 连接池和存储的查询字符串 RAM 泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60765681/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com