使用Singleton模式到Linq到Sql数据上下文

Tha*_*abo 1 c# linq multithreading design-patterns linq-to-sql

我在Linq to SQL中有一些困惑.我正在寻找数据上下文类有时会给出以下异常的实际原因.

"已经有一个与此命令关联的开放式数据读取器必须先关闭

特别是在多任务环境中.大多数人都说,原因是,数据上下文不是线程安全.所有建议使用DataContex作为每个单元的工作.

请参考以下主题以获得最佳答案

跨多个线程的Linq-to-SQL数据上下文

但在我的情况下,我正在使用另一个类调用"A",它以Singleton模式实现.这个类的用途是,以单例方式提供数据上下文对象.我维护此类"A"的实例作为派生的全局实例类和使用特定实例调用Datacontex.

我的问题是,

我的方法调用会导致无法控制的内存增长吗?根据我的理解,单例将一个实例保持为静态对象.如果我的假设是错误的,请给我很好的解释.

注意:

我的方法调用的任何方式也抛出相同的异常.所以我相信在这种情况下也会发生同样的问题.

Jon*_*eet 8

你的方法一般会引起问题.A DataContext不是单身人士.只是不要这样做.

即使A是单例,也要DataContext在其中的适当方法中创建一个新的A,而不是在其中DataContext包含一个变量A.(你可能还想考虑一下是否A真的应该是一个单身人士.)

  • @Thabo:在多线程环境中,各种各样的事情都可能出错 - 例如您所看到的异常.即使在单线程环境中,您最终也可能会看到缓存数据以及永久增加的内存使用量.你只需要接受`DataContext`不是这样设计的,并改变你的设计.你不应该权衡利弊 - *只是不要这样做*. (2认同)