美文网首页
.Net5 EFCore 状态跟踪

.Net5 EFCore 状态跟踪

作者: 王清水 | 来源:发表于2021-03-01 00:16 被阅读0次

        概念:状态跟踪

    EFCore中有枚举EntityState,包括了 Detached,Unchanged,Deleted,Modified,Added五种状态,当实例化Context上下文时,会对Context内存申请的数据都会进行跟踪处理【记录数据操作和数据与数据库之间的关系】;可通过context.Entry<YourEntiryName>(YourEntity).State查看状态

        关于Context每次创建回收是否损耗内存?

        首先Context的创建肯定是不推荐使用单例的,我们对于对象的创建,首先否定的是不能频繁创建大对象;不推荐的原因并不是考虑Context是不是属于大对象,而是对于网络交互又或者是多线程交互,结合到SaveChanges方法事务改变Context数据状态的机制中,都是不适合单例的,那么我们只能每次请求对应一次Context的创建是必须的,那么优化的点又在哪里?
        首先,如果有空,肯定会想到池的方法,不管是线程池或者信号量等概念里都用到此类管理;如果没有空,那我们按照解决事情的三点论(开始,过程,结尾)考虑,如果能主动回收那肯定是个优化点:那么就会想到IDisposable对象;
        --using(dbContext db= new dbContext()  ) 使用using代码块形式
        --在每次action的HttpContext中设置:HttpContext.Response.RegisterForDispose(【readonly Disposable _disposable】) 
        --内置依赖容器:官方链接说明
        --其他

        我们在讨论本优化时,一定要百度查看“主动回收和GC”或者查“IDispoable接口 相比GC回收”

    相关文章

      网友评论

          本文标题:.Net5 EFCore 状态跟踪

          本文链接:https://www.haomeiwen.com/subject/aypvfltx.html