При использовании загрузки данных ODP.NET и пространственной базы данных я использую UDT для определения типа SDOGEOMETRY.
Затем я использую ArrayBindCount в OracleCommand для загрузки пакетов данных.Все работает, но я вижу постоянное увеличение памяти процесса, и счетчики производительности показывают то же самое.
Параметр создается с помощью:
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 ()?