数据库 – 如何避免使用LINQ to SQL的内存泄漏? - 代码日志

数据库 – 如何避免使用LINQ to SQL的内存泄漏?

关于内存使用,我一直在使用LINQ-to-SQL的一些问题。我在Windows服务中使用它进行一些处理,我正在循环大量的数据,我从上下文中拉回来。是的 – 我知道我可以使用存储过程来做到这一点,但是有一些原因可能是一个不太理想的解决方案。

无论如何,我所看到的基本上是内存不被释放,即使我调用context.SubmitChanges()。所以我最终不得不做各种奇怪的事情,比如只能在时间上拉回100条记录,或创建多个上下文,并让它们都做独立的任务。如果我保持相同的DataContext,并且稍后再为其他调用使用它,它只会消耗越来越多的内存。即使我在查询返回给我的“var tableRows”数组中调用Clear(),将其设置为null,并调用SYstem.GC.Collect() – 它仍然不释放内存。

现在我已经阅读了一些关于如何快速使用DataContexts并快速处理它们,但是它似乎应该是一种强制上下文将其所有数据(或其特定表的所有跟踪数据)转储到其中的方法一定要保证记忆是免费的。

任何人都知道什么步骤保证内存被释放?

如果不需要对象跟踪将DataContext.ObjectTrackingEnabled设置为false。如果你确实需要它,你可以使用反射来调用内部的DataContext.ClearCache(),尽管你必须知道,由于它的内部,它将在将来版本的框架中消失。而且据我所知,框架本身并不使用它,但它清除了对象缓存。
http://stackoverflow.com/questions/123057/how-do-i-avoid-a-memory-leak-with-linq-to-sql

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:数据库 – 如何避免使用LINQ to SQL的内存泄漏?