Informix 内存泄漏
Informix memory leak
我 运行 使用 Informix 遇到了一个奇怪的问题(具体来说,我正在使用 IBM.Data.Informix 命名空间,4.10 Client SDK)。我正在使用 ODBC 连接到 IBM Informix 数据库,并且 运行 遇到了内存泄漏问题。文档相当稀疏,我只能使用我目前安装的 driver/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;
}
}
}
我已尝试处理并关闭所有可能的连接,但这似乎无济于事。我是不是遗漏了什么或者是驱动程序的问题?那么问题就变成了,我可以做些什么来逐步释放内存?该应用程序达到约 1200 MB 并崩溃。
我的具体错误是 "Not enough space for parser stacks" 和 "Memory allocation failure"。
我是不是漏掉了什么?
事实证明,这是我为项目使用的 SDK 的特定版本(4.10 - 32 位)的问题。除非您无限期地让连接和命令都打开,否则应用程序将泄漏内存。这不是真正的解决方案,因为连接数量有限,如果我有多个连接到应用程序,连接很快就会用完。因为我需要继续使用这个特定的 SDK 版本,所以我将 IIS 配置为在达到内存阈值(在我的实例中为 1 GB)时回收应用程序池。这暂时解决了这个问题,尽管它没有解决 SDK 的根本问题。
我 运行 使用 Informix 遇到了一个奇怪的问题(具体来说,我正在使用 IBM.Data.Informix 命名空间,4.10 Client SDK)。我正在使用 ODBC 连接到 IBM Informix 数据库,并且 运行 遇到了内存泄漏问题。文档相当稀疏,我只能使用我目前安装的 driver/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;
}
}
}
我已尝试处理并关闭所有可能的连接,但这似乎无济于事。我是不是遗漏了什么或者是驱动程序的问题?那么问题就变成了,我可以做些什么来逐步释放内存?该应用程序达到约 1200 MB 并崩溃。
我的具体错误是 "Not enough space for parser stacks" 和 "Memory allocation failure"。
我是不是漏掉了什么?
事实证明,这是我为项目使用的 SDK 的特定版本(4.10 - 32 位)的问题。除非您无限期地让连接和命令都打开,否则应用程序将泄漏内存。这不是真正的解决方案,因为连接数量有限,如果我有多个连接到应用程序,连接很快就会用完。因为我需要继续使用这个特定的 SDK 版本,所以我将 IIS 配置为在达到内存阈值(在我的实例中为 1 GB)时回收应用程序池。这暂时解决了这个问题,尽管它没有解决 SDK 的根本问题。