我们继承了一些使用 Linq2Sql 的代码,并且我们刚刚发现数据上下文的一个实例存储在一个定义为私有的类成员中。由于一旦创建了该类,就会在 Web 应用程序中使用此类,因此将创建数据上下文的实例并将其分配给静态成员 - 从而生成数据上下文的实例,该实例现在将由该类的所有实例使用(所以对于所有用户来说,这本身就是一个潜在的问题)而且数据上下文的实例现在将在 Web 应用程序的持续时间内存在(因为它保存在静态类成员中)。
忽略最初做出的错误设计决策,我的问题是读入数据上下文的数据会发生什么?我知道 NHibernate 中的会话保留对它读取/创建的任何对象的引用,以便它可以跟踪更改等,并且会话可以缓慢增长和增长并且永远不会清除,除非你隐含地告诉它。Linq2Sql 是否做类似的事情,所以如果 Web 应用程序永远存在(没有回收),这个 linq2Sql 上下文会慢慢增长,直到机器内存不足,或者它可能通过满足传入请求读取整个数据库?据我了解,上下文通常不像缓存,它会删除自身“过期”的项目,或者当达到内存限制时,开始删除最少使用的项目。因为它的作用,我不 不认为数据上下文能够做到这一点?有没有人有过这方面的经验,或者确认我的理解,或者提供一个参考来展示长期存在的数据上下文可以做些什么来阻止这种情况的发生。