使用UDT时的ODP.NET内存泄漏:s

时间:2012-03-21 15:04:45

标签: c# .net oracle odp.net user-defined-types

当使用ODP.NET加载数据和空间数据库时,我使用UDT来定义SDOGEOMETRY类型。

然后我在OracleCommand上使用ArrayBindCount来加载批量数据。一切正常,但我看到过程的内存不断增加,性能计数器显示相同的东西..

参数使用:

创建
var param = new OracleParameter("geom", OracleDbType.Object);
param.UdtTypeName = "MDSYS.SDO_GEOMETRY";
param.Direction = ParameterDirection.Input;
cmd.Parameters.Add(param);

另外,我设置cmd.AddToStatementCache = false以防止数据在那里结束..

添加数据时我使用: param.Value =新对象[numRowsToInsert];

int row = 0;
foreach (var row in rowstoinsert)
{
  OracleUDT.SdoGeometry geoVal = rowstoinsert[row].geom;
  (param.Value as object[])[row] = geoval;
}

...

cmd.ExecuteNonQuery();   //THIS IS WHERE MEMORY LEAK APPEARS TO BE

...

我尝试删除ExecuteNonQuery()运行程序,然后根本没有MemoryLeakage ....

修改 我也尝试删除UDT参数并运行程序,也没有任何泄漏。所以它看起来问题与UDT非常密切相关:s和何时执行语句。

我正在使用ODP.NET 11.2.0.2.1

任何人都有任何线索? 如果不运行ExecuteNonQuery(),是否需要清理哪些不会被创建?

1 个答案:

答案 0 :(得分:0)

以为我会对此进行跟进。 在经过Oracle Tech-Support的大量电子邮件之后,我终于将其视为一个错误

这似乎是Bug 10157396,它在12.1中被修复,计划在11.2.0.4中修复并且已经被后移到11.2.0.2(在Patch Bundle 18中可用)。这可以从MyOracleSupport作为补丁10098816(11.2.0.2)和13897456(Bundle 18)下载,以获得临时解决方案,同时我们得到一个backport到11.2.0.3或直到11.2.0.4发布。