代码之家  ›  专栏  ›  技术社区  ›  chris

安装Visual Studio是否会更改.NET中的垃圾收集?

  •  0
  • chris  · 技术社区  · 16 年前

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

    在我的本地机器上,当我跨过页面_Load()时,我可以通过监视v$session看到在数据库中创建的连接。

    一旦我退出页面加载,所有连接都将关闭。

    在dev服务器上运行的相同代码(w3k,iis6)不会释放资源-根据db,连接仍然存在。

    我在启用和不启用连接池的情况下尝试过这个方法,而且它是相同的——在本地,它可以,在它泄漏的服务器上。

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

    2 回复  |  直到 16 年前
        1
  •  2
  •   adrianbanks    16 年前

    垃圾收集器有三种不同的操作模式:服务器GC、工作站GC并发和工作站GC非并发。每个应用程序都以不同的方式运行,并针对不同类型的应用程序进行了优化。这可能是导致不同行为的原因。具体来说,对于给定的设置,行为可以根据是否有单个或多个CPU而改变。看一看 Tess Ferrandez 更详细的解释。

        2
  •  0
  •   heavyd    16 年前

    每当您在.NET中使用有限的资源(如数据库连接)并希望清理这些资源时,您应该显式地对该对象调用Dispose(),以确保该对象得到正确的清理和释放。

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

    推荐文章