Я использую ODP.Net версии 11.1.0 для вставки данных в базу данных и наблюдаю утечку памяти. Если я закомментирую код ниже, он исчезнет. Этот код вызывается тысячи раз в моем приложении, и я могу наблюдать, как количество байт во всех кучах постоянно увеличивается по мере его запуска. cmdStr содержит оператор вставки, который вставляет в таблицу с 375 столбцами. Поля все НОМЕР, кроме двух - одно - ДАТА, а другое - VARCHAR2 (20). Есть ли что-то еще, что мне нужно сделать, чтобы очистить OracleCommand? Здесь не выдается никаких исключений - команда вставки выполняется каждый раз успешно.
Редактировать: я пытался переместить оператор return, но это не дало ожидаемого результата - использование действительно блока try-finally.
Обновление: я использовал CLRProfiler, чтобы посмотреть, что использует память, и это набор строковых объектов, около 2800 из них. Их ссылки хранятся в объектах HashTable, которые принадлежат
Объекты Oracle.DataAccess.Client.ConnDataPool. Почему ODP.NET хранит их?
try
{
using (OracleCommand cmd = new OracleCommand(cmdStr, conn))
{
cmd.CommandTimeout = txTimeout;
int nRowsAffected = cmd.ExecuteNonQuery();
errMsg = null;
return EndpointResult.Success;
}
}
catch (OracleException e)
{
return BFOracleAdapter.HandleOracleException(e, out errMsg);
}
catch (Exception e)
{
errMsg = "OracleInsertOperation Exception: " + e.Message;
return EndpointResult.Error;
}