【问题标题】:When to close connection to an oracle db from Asp.net何时关闭从 Asp.net 到 Oracle 数据库的连接
【发布时间】:2019-06-03 22:10:16
【问题描述】:

我正在使用 asp.net 应用程序从 oracle db 中检索我的数据,并将它们作为 json 返回以在我的 android 应用程序中使用它们。

我想知道每次我发出请求时是否必须打开、关闭与数据库的连接,或者是否最好打开一次连接并保持打开状态,因为我正在编程的应用程序将打开 24 小时/7d .

我读过一些关于连接池的东西,但它让我有点困惑,

因为我不知道连接池是否会被使用,因为我使用移动应用程序询问我的 asp.net 应用程序。

提前感谢您的回复。

【问题讨论】:

  • 即使您希望您的服务器启动并运行,请在完成工作后关闭您的连接。如果您保持连接打开并且多个用户连接到您的服务器,则可能导致连接池完全异常。
  • 非常感谢我现在看到

标签: android asp.net database oracle database-connection


【解决方案1】:

我假设您的服务是无状态的。然后在每次请求后连接会自动终止,并且仍然在内存中的所有内容都被清除(只要它不是静态的)。 但是,如果您将针对数据库所做的所有事情都用 usings 包装起来会更好。这将自动关闭所有连接并清除所有内容。例如=>

using (System.Data.IDbConnection con = DBFactory.CreateDbConnection(Session))
{
    using (System.Data.IDbCommand cmd = DBFactory.CreateDbCommand(con))
    {

当您有多个查询时,您甚至可以这样做。如果你想连接它们,你必须通过交易来完成。即使您关闭它,事务也会使连接保持打开状态。 您不必担心速度,因为 .Net 在后台运行连接池,并不会真正关闭连接。

希望对你有帮助!

【讨论】:

    【解决方案2】:

    您有 3 个选项。

    1. 在每次请求时打开和关闭数据库。
    2. 在 Initialize 上打开数据库,在 Page_UnLoadOnError 上关闭它
    3. 永远打开数据库,在回收时关闭它。

    我们从 (1) 开始,然后尽可能优化 (2),然后避免 (3)。

    为什么我们避免使用 3d 选项,因为如果我们有许多池或许多线程,我们可能会因调用冲突而结束,而且可能会留下许多打开的连接,最终没有任何其他可用的连接。

    默认情况下我们需要 (1),因为我们总是需要一些额外的调用来从数据库中询问一些东西 -

    我们使用 (2) 进行优化,因为在页面渲染时,我们通常需要多个数据库调用 - 一个共享打开连接仅用于一个调用可以稍微提高速度。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-16
      • 2016-12-31
      • 1970-01-01
      • 1970-01-01
      • 2014-09-11
      • 2018-10-12
      • 2022-01-23
      • 1970-01-01
      相关资源
      最近更新 更多