我有一个静态队列实例用于接收业务产生的日志,再开了一个后台线程读取队列中的元素使用EFCore写入数据库中
现在发现数据量增大的情况下内存占用持续升高,抓dump文件看了:
看起来是队列中已出队的元素没有被GC回收掉,另外有很多ChangeTracking相关的数据不是很明白,望大佬们指导~
不知道。不过可以提供另一种思路:如果数据量大的话,用Redis等成熟的内存存储系统代替队列
不知道。不过可以提供另一种思路:如果使用现成的日志比如 NLog, SerilLog, Log4net啥的不香吗?
DbContext 用完立即释放吧。否则Entity默认会被DbContext引用,跟踪变化(ChangeTracking)
using (var someContext = new SomeContext())
{
// your commands/queries
}
经过各种排查,确认是EF实体跟踪导致实例无法释放的问题,手动设置EntityEntry为Detached状态可以解决。
– balahoho 4年前