【问题标题】:Does installing Visual Studio change garbage collection in .Net?安装 Visual Studio 是否会更改 .Net 中的垃圾收集?
【发布时间】:2009-06-15 21:21:43
【问题描述】:

我正在尝试调试一些资源泄漏 - 特别是 oracle 连接。

在我的本地机器上,当我单步执行 Page_Load() 时,我可以通过监控 v$session 查看在数据库中创建的连接。

我一退出 Page_Load,所有的连接都关闭了。

在开发服务器(W3k、IIS6)上运行的相同代码不会释放资源 - 根据 db 的连接仍然存在。

我在启用和不启用连接池的情况下都试过了,结果都是一样的——在本地很好,在服务器上它会泄漏。

我已验证 .net 框架在两个地方都是相同的,并且代码也相同。我错过了什么?

【问题讨论】:

    标签: asp.net oracle memory-leaks connection-pooling


    【解决方案1】:

    垃圾收集器具有三种不同的操作模式:Server GC、Workstation GC Concurrent 和 Workstation GC Non Concurrent。每个都以不同的方式运行,并针对不同类型的应用程序进行了优化。这可能是导致不同行为的原因。具体来说,行为可以根据是否存在单个或多个 CPU 来更改给定设置。请查看Tess Ferrandez 的博客以获得更详细的说明。

    【讨论】:

    • 我们实际上在三台机器上进行了测试,看起来每台机器都在使用三种不同场景中的一种。谢谢你的解释!
    【解决方案2】:

    当您在 .NET 中使用有限的资源(如数据库连接)并期望资源被清理时,您应该在对象上显式调用 Dispose() 以确保它被清理并正确释放。

    至于 Visual Studio 更改垃圾收集,我不明白为什么会这样。垃圾收集器的行为可能会有所不同,因为您在具有不同内存配置文件的不同机器上运行。您不能期望垃圾收集器以任何定义的方式运行,尤其是跨机器。但看起来你有一个更大的问题是没有正确处理你的数据库连接。

    【讨论】:

    • 好吧,我以为我们正确处理了所有内容 - 我现在试图解释为什么相同的代码在不同的服务器上的工作方式不同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-21
    • 1970-01-01
    • 2011-03-05
    • 2012-12-20
    • 2012-07-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多