gpt4 book ai didi

linq-to-sql - 长期存在的 Linq2Sql DataContext 是否会删除对跟踪对象的引用?

转载 作者:行者123 更新时间:2023-12-01 23:18:14 24 4
gpt4 key购买 nike

我们继承了一些使用 Linq2Sql 的代码,我们刚刚发现数据上下文的一个实例存储在定义为私有(private)的类成员中。由于此类在创建类后会在 Web 应用程序内部使用,因此将创建数据上下文的实例并将其分配给静态成员 - 导致数据上下文的实例现在将由该类的所有实例使用(因此对于所有用户而言,这本身就是一个潜在的问题)而且数据上下文的实例现在将在 Web 应用程序的持续时间内存在(因为它保存在静态类成员中)。

忽略最初做出的错误设计决策,我的问题是读入数据上下文的数据会发生什么情况?我知道 NHibernate 中的 session 保留对其读取/创建的任何对象的引用,以便它可以跟踪更改等,并且 session 可以慢慢增长和增长并且永远不会清除,除非你隐式地告诉它。 Linq2Sql 是否做类似的事情,那么如果 Web 应用程序永远存在(没有回收),这个 linq2Sql 上下文会慢慢增长直到机器内存不足,或者它可能通过满足传入请求读取整个数据库吗?据我了解,上下文通常不像缓存,它会从自身中删除“过期”的项目,或者在达到内存限制时开始删除最少使用的项目。由于它的作用,我不认为数据上下文能够做到这一点?有没有人有这方面的经验,并确认我的理解或提供引用以显示长期数据上下文可以做什么来阻止这种情况的发生。

最佳答案

是的,如果 ObjectTrackingEnabled 属性设置为 trueDataContext 将跟踪它读取的对象。默认情况下启用。如果 DataContext 已经处于跟踪状态,则不能将 ObjectTrackingEnabled 的值更改为 false。

当我们只是进行读取而不打算进行任何更改时,我们将 ObjectTrackingEnabled 设置为 false。当 ObjectTrackingEnabled 设置为 false 时,您不能调用 SubmitChanges

希望对您有所帮助。

关于linq-to-sql - 长期存在的 Linq2Sql DataContext 是否会删除对跟踪对象的引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14232631/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com