我正在处理一个批处理过程,它将慢速遗留数据库中的80万条记录(每次记录提取time...it加起来1.4-2ms)中的~80万条记录转储到MySQL中,这样可以执行得更快一些。为了优化这一点,我一直在将所有的MySQL记录加载到内存中,这使使用量达到了大约200 To。然后,我开始从遗留数据库中转储并更新记录。
最初,当它完成更新记录时,我将调用SaveContext,这将使我的内存从大约500 my 800 my跃升到1.5GB。很快,我就会摆脱内存异常(正在运行的虚拟机有2GB的RAM),即使我给它提供更多的RAM,1.5-2GB的内存仍然有点过高,这只是为问题提供了一个创可贴。为了弥补这一点,我开始每10,000条记录调用一次,这对一些事情都有帮助,而且由于我使用委托从遗留数据库中获取数据并在MySQL中更新它,所以性能没有受到太大的影响,因为在保存5秒左右之后,它将在内存中运行更新,以保存备份的大约3000条记录。然而,内存的使用仍然在不断上升。
以下是我的潜在问题:
我想出的一个可能的解决方案是以某种方式释放实体使用的内存,因为它们已经被更新(比如清除缓存,但只用于特定项),但我不知道实体框架是否可能使用这些内存。
有人有什么想法吗?
发布于 2012-06-29 01:15:04
您可以在上下文中调用Detach方法,将不再需要的对象传递给它:http://msdn.microsoft.com/en-us/library/system.data.objects.objectcontext.detach%28v=vs.90%29.aspx
发布于 2012-06-29 02:08:55
我想知道您的最佳选择不是以前建议的另一个工具,还是干脆放弃使用实体框架。如果您不使用ORM来执行代码,则可以:
https://stackoverflow.com/questions/11254642
复制相似问题