Informix 内存泄漏

awh*_*112 3 .net c# sql informix memory-leaks

我在使用 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<Item> GetItems()
    {
        var items = new List<Item>();

        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;
    }
}
Run Code Online (Sandbox Code Playgroud)

}

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

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

我错过了什么吗?

awh*_*112 5

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