首页 新闻 会员 周边 捐助

c#内存占用问题

0
悬赏园豆:50 [待解决问题]

我有一个静态队列实例用于接收业务产生的日志,再开了一个后台线程读取队列中的元素使用EFCore写入数据库中
现在发现数据量增大的情况下内存占用持续升高,抓dump文件看了:

看起来是队列中已出队的元素没有被GC回收掉,另外有很多ChangeTracking相关的数据不是很明白,望大佬们指导~

balahoho的主页 balahoho | 老鸟四级 | 园豆:2050
提问于:2020-06-18 17:34

经过各种排查,确认是EF实体跟踪导致实例无法释放的问题,手动设置EntityEntry为Detached状态可以解决。

balahoho 4年前
< >
分享
所有回答(3)
0

不知道。不过可以提供另一种思路:如果数据量大的话,用Redis等成熟的内存存储系统代替队列

会长 | 园豆:12463 (专家六级) | 2020-06-18 18:08
0

不知道。不过可以提供另一种思路:如果使用现成的日志比如 NLog, SerilLog, Log4net啥的不香吗?

爱编程的大叔 | 园豆:30844 (高人七级) | 2020-06-19 08:35
0

DbContext 用完立即释放吧。否则Entity默认会被DbContext引用,跟踪变化(ChangeTracking)

 using (var someContext = new SomeContext())
 {
    // your commands/queries
 }
sweetjian | 园豆:276 (菜鸟二级) | 2020-08-22 15:47
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册