Los*_*les 7 c# entity-framework memory-management out-of-memory objectcontext
我正在进行一个批处理过程,它从一个缓慢的遗留数据库(每个记录获取时间1.4-2ms ......它加起来)转储~800,000条记录到MySQL中,它可以执行得更快一点.为了优化这一点,我一直在将所有MySQL记录加载到内存中,这使得使用量大约为200MB.然后,我开始从遗留数据库转储并更新记录.
最初,当这将完成更新记录时,我会调用SaveContext,然后使我的内存从~500MB-800MB跳到1.5GB.很快,我会失去内存异常(运行的虚拟机有2GB的RAM),即使我要给它更多的RAM,1.5-2GB仍然有点过分,这只是一个乐队 - 问题.为了解决这个问题,我开始每10,000条记录调用一次SaveContext,这有点帮助了一些事情,因为我使用委托来从遗留数据库中获取数据并在MySQL中更新它,因此我没有收到太可怕的性能影响.在保存时等待5秒左右,然后在内存中更新已经备份的3000个左右的记录.但是,内存使用量仍在不断增加.
以下是我的潜在问题:
我想到的一个可能的解决方案是以某种方式释放实体使用的内存,我知道我永远不会再次触摸,因为它们已经更新(比如清除缓存,但只针对特定项目),但我不知道如果甚至可以使用Entity Framework.
有人有想法吗?
您可以在上下文中调用Detach方法,将它传递给您不再需要的对象:http: //msdn.microsoft.com/en-us/library/system.data.objects.objectcontext.detach%28v=vs.90% 29.aspx
| 归档时间: |
|
| 查看次数: |
15488 次 |
| 最近记录: |