EF有缓存,我数据库有100G数据,它也缓存这么多吗?
EF的缓存策略是什么样的?
MemkoryStream ms;
using(var bmp = new Bitmap(100,25)){
using(var g = Graphics.FromImage(bmp)){
g.Clear(Color.White);
g.FillRectangle(Brushes.Red,2,2,90,31);
g.DrawString("1234",new Font("黑体",15f),Brushes.Yellow,new Point(5f,5f));
ms = new MemoryStream();
bmp.Save(ms,ImageFormat.Jpeg);
}
}
return File(ms.ToArray(),"image/jpeg")
哈哈,这个你应该从数据存储层面来谈谈,EF在实质也是转成SQL语句来实现的。他只会把符合结果的数据条目加载出来。你一次加载100G的使用场景是什么样的。
我想知道的是EF有没有类似内存管理这样的东东,它肯定不会是缓存所有查询出来的数据的,那岂不是就跟memcache一样了。
项目部署以后,随着时间的推移,查询、插入的数据越来越多,EF缓存的数据也越来越多吗?
你把100G数据都读取出来了.他就缓存这100G数据,如果你有2个上下文就是100*2G
那我服务器内存只有8G,这么说EF就报错?宕机?死机?
@Eysa: 所有的缓存系统设计时都是容量限制和缓存失效机制的
EF有缓存?这个说法你是在哪里看到的呀?我没听说过呢。
EF最终还是转成SQL在执行,你需要多少数据就取多少数据,怎么也不能一次需要100G的数据吧,100条还差不多呢!
你的意思是说EF没有缓存了?
@Eysa: 是的。至少现在的版本里面,没有看到说EF有缓存这样的说法。以后的版本或许会有吧。
ef有跟踪机制
非这种状态的EntityState.Detached
同一个context的数据都会保存在内存中
然后context 是线程安全的
换句话说 如果context是在一个线程创建的 那么就只有这个可以用 其他线程用的话就会报错
这个问题会出现在 如果 你申明一个静态的context
第一次访问 可以用 第二次访问就会报错 因为每次请求是一个新的线程