【问题标题】:What happens when NOT closing recordsets in classic asp?在经典 asp 中不关闭记录集时会发生什么?
【发布时间】:2010-12-09 03:40:49
【问题描述】:

在工作中的遗留应用程序中,我看到未关闭的记录集散布在许多页面上。

  • 这有什么后果?
  • 连接会自动关闭吗?
  • 是否在每个请求结束时释放资源?

更新:

txn!

【问题讨论】:

  • 我们也有同样的问题。我尽量远离asp...

标签: asp-classic database-connection


【解决方案1】:

我积极维护数十个 Classic ASP 网站/内联网/外联网/系统。

经验法则是:

  • 最近声明、分配和打开变量和对象实例
  • 使用.close() 方法(在记录集上)

然后,对于任何对象实例,我们如下释放内存:

  • Set variableABC = Nothing'它会破坏变量和对象实例之间的指针,但它不会释放内存
  • variableABC = Empty '它将有效地释放内存。最后一个也适用于所有类型的变量,因为 VBScript/ASP 变量是无类型的。因此,可以(并且应该)沿着脚本以这种方式释放字符串、长整数、货币或数组(仅适用于大小合适的变量。释放包含"abc" 的变量是没有用的,除非你有您的脚本中有数百万个)。

【讨论】:

    【解决方案2】:
    • 这有什么后果?

    资源不会很快被释放,并且取决于代码的其余部分,性能会受到影响。

    • 连接会自动关闭吗?
    • 是否在每个请求结束时释放资源?

    在页面执行结束时,所有连接都被终止并释放所有资源。有些人认为,既然发生了这种情况,就无需担心显式关闭连接和/或释放资源。

    在所有条件相同的情况下,不鼓励依赖这一点,因为您永远不知道在交通繁忙的情况下事情会如何发展 - 这就是为什么所有优秀的教程/讲师都会告诉您仅在需要时打开,并且完成后立即发布。

    【讨论】:

      【解决方案3】:

      如果不关闭它,就会出现内存泄漏,这会很快耗尽您的资源。 IIS 最终会为您清理资源,但它不是很可靠。显式关闭记录集然后将其设置为空以释放资源更安全、更可靠。还要确保关闭您的连接并将其设置为空。

      【讨论】:

      • 是否能够敲出复制品来确认这一点?
      【解决方案4】:

      关闭记录集不会关闭连接

      http://www.devguru.com/technologies/ado/QuickRef/recordset_close.html

      您应该始终尽快关闭连接,以将它们释放回连接池中。

      泄漏连接的系统会变慢并逐渐停止。

      【讨论】:

      • 如果您不关闭页面中的连接/记录集不是资源使用的唯一区别,那么在页面结束之前释放资源的区别是什么?这本身不应该构成内存泄漏,因为所有连接/记录集仍然关闭,它们只是稍后关闭。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多