在“unload”方法中关闭连接

2023-12-07

我继承了一个 Web 框架,以前的开发人员在页面生命周期的 init/unload 方法中打开和关闭了他的数据库连接。本质上构造函数是这样的(简化以演示要点);

public class BasePage
{
   protected DBConnection _conn;

   public BasePage()
   {
      Init += StartConnection;
      Unload += EndConnection;
   }

   private void StartConnection(object sender, EventArgs e)
   {
      _conn = new DBConnection(Application["connectionstring"].ToString());   
   }

   private void EndConnection(object sender, EventArgs e)
   {
      if (_conn == null)
         return;

      if (_conn.Connection.State == ConnectionState.Open)
      {
     _conn.Close();
         _conn.Dispose();
      }
   }
}

自从我来到这里以来,发展速度相当快,所以我从未停下来考虑它。最近,访问量有所增加,我们开始收到可怕的“超时已过期。从池中获取连接之前超时时间已过...”错误。

我目前正在检查其余的代码,寻找可能的连接泄漏,但上面的代码从来没有完全符合我的要求,我想消除它作为潜在的罪魁祸首。那么接下来的问题;

即使发生异常,我是否可以始终调用“卸载”方法?或者任何人都可以使用上述模式看到任何其他潜在问题,从而使其成为这些连接泄漏的主要嫌疑人?

Cheers,

Mikey

编辑:在调试中,即使出现异常,卸载方法也总是被调用。我真的只需要知道不会调用此方法的任何场景,这样我就可以弄清楚这是否是我需要首先重构的部分。

编辑:感谢那些到目前为止做出回应的人,但请不要再提出有关 IDisposable 类或“使用”或“catch/finally”模式的建议 - 这不是我的问题!我的问题具体是,页面是否可以运行其“Init”事件,但随后无法运行“Unload”事件,以及为什么会发生这种情况。


我不知道这是否安全,但我浏览了 System.Web.UI.Page 类的源代码,卸载事件由私有 ProcessRequestCleanup() 触发,除非请求是异步的或跨页面请求。对 clean up 方法的调用位于与 ProcessRequest 周围的 try 块耦合的 finally 块内。处理请求正在触发从PreInit到Render的所有页面生命周期事件。这意味着即使发生异常,卸载也将始终被触发(异步和跨页情况除外)。

然而,我会感到非常不安,因为卸载的行为没有被准确记录在我的页面中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在“unload”方法中关闭连接 的相关文章

  • 用于检查类是否具有运算符/成员的 C++ 类型特征[重复]

    这个问题在这里已经有答案了 可能的重复 是否可以编写一个 C 模板来检查函数是否存在 https stackoverflow com questions 257288 is it possible to write a c template
  • 从Web API同步调用外部api

    我需要从我的 Web API 2 控制器调用外部 api 类似于此处的要求 使用 HttpClient 从 Web API 操作调用外部 HTTP 服务 https stackoverflow com questions 13222998
  • 如何从 appsettings.json 文件中的对象数组读取值

    我的 appsettings json 文件 StudentBirthdays Anne 01 11 2000 Peter 29 07 2001 Jane 15 10 2001 John Not Mentioned 我有一个单独的配置类 p
  • 关于 C++ 转换:参数 1 从“[some_class]”到“[some_class]&”没有已知的转换

    我正在研究 C 并且遇到了一个错误 我不知道确切的原因 我已经找到了解决方案 但仍然想知道原因 class Base public void something Base b int main Base b b something Base
  • 在 ASP.NET 5 中使用 DI 调用构造函数时解决依赖关系

    Web 上似乎充斥着如何在 ASP NET 5 中使用 DI 的示例 但没有一个示例显示如何调用构造函数并解决依赖关系 以下只是众多案例之一 http social technet microsoft com wiki contents a
  • 使用 WebClient 时出现 System.Net.WebException:无法创建 SSL/TLS 安全通道

    当我执行以下代码时 System Net ServicePointManager ServerCertificateValidationCallback sender certificate chain errors gt return t
  • HttpContext.GetGlobalResourceObject 始终返回 null

    我在 App GlobalResources 文件夹中创建了两个文件 SiteResources en US resx SiteResources sp SP resx 两者都包含 SiteTitleSeparator 的值 这是我想要做的
  • 将多个表映射到实体框架中的单个实体类

    我正在开发一个旧数据库 该数据库有 2 个具有 1 1 关系的表 目前 我为每个定义的表定义了一种类型 1Test 1Result 我想将这些特定的表合并到一个类中 当前的类型如下所示 public class Result public
  • 不可勾选的单选按钮与专有的复选框

    从 UI 角度来看 是拥有一组具有取消选中功能的单选按钮更好 还是拥有一组独占的复选框 意味着一次只能选中一个 更好 Update 我没想到对此会有如此负面的反应 如果我给出一个更接近其使用方式的示例 也许会有所帮助 我有一个充满数据绑定内
  • WCF 中 SOAP 消息的数字签名

    我在 4 0 中有一个 WCF 服务 我需要向 SOAP 响应添加数字签名 我不太确定实际上应该如何完成 我相信响应应该类似于下面的链接中显示的内容 https spaces internet2 edu display ISWG Signe
  • 显示UnityWebRequest的进度

    我正在尝试使用下载 assetbundle统一网络请求 https docs unity3d com ScriptReference Networking UnityWebRequest GetAssetBundle html并显示进度 根
  • 使用 Bearer Token 访问 IdentityServer4 上受保护的 API

    我试图寻找此问题的解决方案 但尚未找到正确的搜索文本 我的问题是 如何配置我的 IdentityServer 以便它也可以接受 授权带有 BearerTokens 的 Api 请求 我已经配置并运行了 IdentityServer4 我还在
  • 如何设计以 char* 指针作为类成员变量的类?

    首先我想介绍一下我的情况 我写了一些类 将 char 指针作为私有类成员 而且这个项目有 GUI 所以当单击按钮时 某些函数可能会执行多次 这些类是设计的单班在项目中 但是其中的某些函数可以执行多次 然后我发现我的项目存在内存泄漏 所以我想
  • 转发声明和包含

    在使用库时 无论是我自己的还是外部的 都有很多带有前向声明的类 根据情况 相同的类也包含在内 当我使用某个类时 我需要知道该类使用的某些对象是前向声明的还是 include d 原因是我想知道是否应该包含两个标题还是只包含一个标题 现在我知
  • 如何序列化/反序列化自定义数据集

    我有一个 winforms 应用程序 它使用强类型的自定义数据集来保存数据进行处理 它由数据库中的数据填充 我有一个用户控件 它接受任何自定义数据集并在数据网格中显示内容 这用于测试和调试 为了使控件可重用 我将自定义数据集视为普通的 Sy
  • 如何使用 C# / .Net 将文件列表从 AWS S3 下载到我的设备?

    我希望下载存储在 S3 中的多个图像 但目前如果我只能下载一个就足够了 我有对象路径的信息 当我运行以下代码时 出现此错误 遇到错误 消息 读取对象时 访问被拒绝 我首先做一个亚马逊S3客户端基于我的密钥和访问配置的对象连接到服务器 然后创
  • 对现有视频添加水印

    我正在寻找一种用 C 在视频上加水印的方法 就像在上面写文字一样 图片或文字标签 我该怎么做 谢谢 您可以使用 Nreco 视频转换器 代码看起来像 NReco VideoConverter FFMpegConverter wrap new
  • 向现有 TCP 和 UDP 代码添加 SSL 支持?

    这是我的问题 现在我有一个 Linux 服务器应用程序 使用 C gcc 编写 它与 Windows C 客户端应用程序 Visual Studio 9 Qt 4 5 进行通信 是什么very在不完全破坏现有协议的情况下向双方添加 SSL
  • 测试用例执行完成后,无论是否通过,如何将测试用例结果保存在变量中?

    我正在使用 NUNIT 在 Visual Studio 中使用 Selenium WebDriver 测试用例的代码是 我想在执行测试用例后立即在变量中记录测试用例通过或失败的情况 我怎样才能实现这一点 NUnit 假设您使用 NUnit
  • C# - OutOfMemoryException 在 JSON 文件上保存列表

    我正在尝试保存压力图的流数据 基本上我有一个压力矩阵定义为 double pressureMatrix new double e Data GetLength 0 e Data GetLength 1 基本上 我得到了其中之一pressur

随机推荐

  • 将记录集传递给函数而不是单个变量有什么缺点吗?

    我们有一个单用户 Access 2007 数据库 它可以执行诸如发送报告和根据计时器 事件 更新其他数据库之类的操作 一次一个事件 执行每个事件时 都会创建一个单行记录集 其中包含该事件运行所需的信息 我一直使用单个变量以通常的方式将参数传
  • Jupyter Notebook 500:内部服务器错误

    我想学习如何使用 Jupyter Notebook 到目前为止 我已经成功下载并安装了它 使用 pip 但我在打开它时遇到了问题 我通过输入以下内容打开它 jupyter notebook 在我的终端中 它在我的浏览器中打开 网址为 htt
  • WorkManager:如何在同一个应用程序中设置不同的WorkManager配置

    我正在开发一个多模块项目 Gradle 模块 我在我的模块中使用 WorkManager 我还使用 Dagger 进行依赖注入 现在我必须使用 dagger 将依赖项注入到我的 WorkManager 中 我非常熟悉 Dagger 2 与
  • 确定 Android GC 何时运行

    有谁知道是否有一种方法可以识别 在代码中 而不是 LogCat GC 何时运行 也许有意图被激发 我可以分析 LogCat 输出 但如果我能够确定 GC 何时从我的代码运行 那就更理想了 您可以使用弱引用技巧来做到这一点 WeakRefer
  • 连接间隔 核心蓝牙

    有没有办法通过Core Bluetooth更改连接间隔 我正在将数据块传输到外设 并且传输数据需要花费很多时间 我想减少这个时间 如果可以使用核心蓝牙从 iOS 写入或更新连接间隔 请告诉我 谢谢 仅通过将连接参数更新从外设发送到 iOS
  • 在 R 中合并具有缺失值的数据框

    获取数据帧的代码 rat all structure list frequency c 37L 31L 14L 11L 2L 3L isoforms 8 13 type structure c rat all rat all rat all
  • 在 R 的 data.table 中查找 foverlap 的一次迭代中的所有重叠

    我正在尝试使用 data table 合并 R 中的一堆重叠时间段 我有一个对表本身的 foverlap 的调用 这足够有效 我的问题是这样的 假设A期与B期重叠 B与C期重叠 但A不与C重叠 在这种情况下 A不与C分组 它们最终必须合并
  • Groupby 和 Pivot Pandas 表

    这应该很快 但是我正在做的枢轴 分组工作都没有达到我的需要 我有一个这样的表 Letter Period Amount YrMnth 2014 12 B 6 0 2014 12 C 8 1 2014 12 C 9 2 2014 12 C 1
  • 不显示背景图像的元素

    我正在尝试为 a 元素添加背景图像 但它只会显示图像的一部分 因此 如果我将 Home 作为值 则无论 home 占用的空间是什么 这就是图像的显示内容 如果该值是空它不会显示图像的任何内容 尽管我已经设置了要显示的 a 元素的宽度和高度
  • 解释 HTTP/1.1 标头字段值时使用什么编码

    在 HTTP 1 1 规范中 当涉及到定义标头时 我得到了这个 消息头 字段名称 字段值 字段值 字段内容 LWS field contet OCTET 和 TEXT 的定义是 OCTET TEXT 其中 CTL 指的是 US ASCII
  • 如何在delphi 7中释放字符串列表中的对象?

    下面是 Zarko Gajic 在 Delphi 的 TStrings 项目中释放对象的想法 在关于德尔福我使用的是 Delphi 7 TStringList 没有 OwnsObjects 运行以下代码会提示EaccessViolation
  • 向 .gitignore 添加新条目不起作用

    如果我理解正确的话 为了 忽略 一个文件 这样当我输入时它就不会出现git status or git add A我需要将其添加到 gitignore 文件中 我的目标是在向 Git 提交更改时永久忽略某个文件夹和文件 我尝试在编辑器中编辑
  • MongoDb / C# 过滤并获取所有子文档

    我在查询 Mongodb 集合时遇到困难 我正在使用的文档 public class Customer public ObjectId Id get set public int CustomerId get set public List
  • 如何在 datagridview 列中显示总和?

    我需要显示的总和count专栏从这里datagridview 但我不知道如何获取 datagridview 中的数据 当我点击按钮时 我想显示94 in label1 如何才能做到这一点 int sum 0 for int i 0 i lt
  • Ionic 取消硬后退按钮覆盖

    关于在 Ionic 中覆盖物理 Android BACK 按钮以提供自定义行为存在一些问题 Ionic 覆盖特定控制器的所有 后退 按钮行为 Ionic 如何覆盖后退按钮功能 但你如何取消覆盖恢复默认行为 我尝试更改处理程序的优先级 希望默
  • C3.js 从 CSV 中排除列

    我正在使用 C3 JS 通过从提供的 CSV 文件加载数据来创建多系列折线图 我可以绘制图表 但是我还没有发现是否可以仅绘制 CSV 中的某些列 我的图表正在绘制所有 CSV 列 我的 CSV 看起来像这样 Sex Age L M S P3
  • 使用 OpenDaylight 入门原型不起作用

    尝试跟随开放日光开发者教程获得在控制器上运行的初始 hello world 应用程序 但是运行命令 mvn archetype generate DarchetypeGroupId org opendaylight controller D
  • Dictionary 和 ConcurrentDictionary 之间修改集合时的不同行为

    使用如下所示的正常字典代码 我得到的异常是 集合已修改 枚举操作可能无法执行 Dictionary
  • 比较目标 C 中的时间和日期

    例如 如何在目标 C 中进行比较 以查看某个时间和日期期间是否与 plist 中已有的另一个时间和日期期间重叠 这最常用于预订 预订应用程序 以查看该特定时间段是否已被占用等 尝试这个来比较 NSDateFormatter dateForm
  • 在“unload”方法中关闭连接

    我继承了一个 Web 框架 以前的开发人员在页面生命周期的 init unload 方法中打开和关闭了他的数据库连接 本质上构造函数是这样的 简化以演示要点 public class BasePage protected DBConnect