【发布时间】:2010-01-21 17:20:54
【问题描述】:
我正在使用 SQL Server 2008 在 Windows Server 2008 上运行服务器应用程序,现在我的方案是给定的。
我已经实现了一个自定义连接池(我为什么要这样做,这是另一个长篇大论)。因此我不会在每个请求上打开或关闭连接。
服务器应用程序使用池中可用的 10 个连接在一分钟内执行数千个 DBCommand。
在执行命令之后,我没有清理连接(因为我不知道要清理什么以及如何在不关闭和重新打开它的情况下清理),而且我没有处理命令对象本身。
当服务器应用程序关闭时,它会通过调用它们的 close 方法释放所有连接。
现在我观察到在 sqlserver 的 1 小时或 2 个进程的测试后,大约 3Gig 内存,然后我关闭了我的服务器应用程序,即使占用的内存没有释放或减少(根据任务管理器和资源监视器)毕竟我重新启动了sqlserver以释放内存。
下面是我的问题。
我是否需要每次都调用 DBCommand 对象的 Dispose,如果是,那么它会对连接对象产生影响。
上面提到的问题是我观察到的还是有其他原因。
有什么方法可以在不关闭连接的情况下清理连接,以及每次执行 DbCommand 后需要清理哪些垃圾。
谢谢 穆巴沙尔
【问题讨论】:
-
实现自定义连接池是我书中的核心内容。如果您需要询问 IDispose,那么我不会编写自定义池。
-
以下段落被添加为答案,但不是我在此处添加它作为对我原来问题的评论的答案。好吧,我查看了代码,发现我在命令对象上使用了“Using”语句,如下所示 using (DbCommand command = connectionAdoptor.GetDbCommand()) { //...bla bla bla } 它会自动调用 dispose 即使命令在其他函数上分配内存,如上述语句 GetDBCommand 正在初始化命令对象并返回引用。我对吗????问候穆巴沙
标签: .net sql-server-2008 dispose idbcommand