Csharp/C#教程:Informix内存泄漏分享


Informix内存泄漏

我使用Informix遇到了一个奇怪的问题(具体来说,我使用的是IBM.Data.Informix命名空间,4.10 Client SDK)。 我使用ODBC连接到IBM Informix数据库并遇到内存泄漏问题。 文档相当稀疏,我被锁定使用我目前安装的驱动程序/ SDK。 这是我用于数据库上下文的代码:

public class IfxDbContext : IIfxDbContext { private readonly string _connectionString; //private readonly IfxConnection _connection; public IfxDbContext(string connectionString) { _connectionString = connectionString; //IfxConnection conn = new IfxConnection(connectionString) {ConnectionString = connectionString}; //_connection = conn; } public IEnumerable GetItems() { var items = new List(); try { using (IfxConnection conn = new IfxConnection(_connectionString)) { conn.Open(); using (IfxCommand cmd = conn.CreateCommand()) { cmd.CommandText = "VALID SQL COMMAND"; IfxDataReader dr = cmd.ExecuteReader(); while (dr.Read()) { //add to items } } } } catch(IfxException ex) { } return items; } } 

}

我试过处理和关闭任何我可以的连接,但这似乎没有帮助。 我错过了什么或是驱动程序的问题? 那么问题就变成了,我该怎样做才能逐步释放内存? 该应用程序约1200 MB左右崩溃。

我的特定错误是“没有足够的空间用于解析器堆栈”和“内存分配失败”。

我错过了什么吗?

事实certificate,这是我用于项目的SDK的特定版本(4.10 – 32位)的问题。 除非您将连接和命令都无限期地打开,否则应用程序将泄漏内存。 这不是一个真正的解决方案,因为存在有限数量的连接,如果我与应用程序有多个连接,则很快就会耗尽。 因为我需要继续使用此特定的SDK版本,所以我将IIS配置为在达到内存阈值(我的实例中为1 GB)时回收应用程序池。 这解决了这个问题,尽管它没有解决SDK的根本问题。

上述就是C#学习教程:Informix内存泄漏分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/943255.html

(0)
上一篇 2021年11月14日
下一篇 2021年11月14日

精彩推荐