2012-03-21 40 views
1

ODP.NETのロードデータを空間データベースに使用する場合、UDTを使用してSDOGEOMETRYタイプを定義しています。UDTを使用するとODP.NETのメモリリークが発生する:

次に、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];私はは、ExecuteNonQuery(でプログラムを実行してみました

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 

..

)除去し、その後、まったくMemoryLeakageはありません....

編集: また、UDTパラメータを削除して、プログラムを実行しようとしましたが、漏れはありません。だから、問題はUDTに非常に密接に関連しているようです:sとwhen文が実行されます。

私は11.2.0.2.1

誰でも任意の手掛かりを得たODP.NETを使用していますか? ExecuteNonQuery()を実行していない場合に作成されない、きれいにする必要があるものはありますか?

+0

ExecuteNonQueryメソッドは、(ODP.NETプロバイダを介して)すべてのADO.NETの作業を実行するので、実行しないとリークは発生しません。さまざまなADO.NETオブジェクト(接続とコマンド)を適切にオープン、クローズ、ディスポーザルしていますか? –

+0

私はコードを挿入して実行していますが、UDT列を残しておくと(他の17列を残しても)メモリがリークしません... コマンドは次のようにクリーンアップされています:cmd.Connection.PurgeStatementCache cmd.ArrayBindCount = 0; (int i = 0; i Peter

+0

あなたは正しいことをしているように思えます。次のステップは、[WinDbg](http://blogs.msdn.com/b/johan/archive/2007/11/13/getting-started-with-windbg-part-i)を使用して.NETのメモリリークを検証することです。 .aspx)。残念ながらセットアップ&使用するにはかなり難しいツールです。メモリがリークしたときにアプリケーションのメモリダンプを作成します。 WinDbgでロードして.NET用に設定した後、!dumpheap -type "UDT columnn type"ここでは、UDT columnnタイプに実際のODP.NETタイプを使用します。多くのインスタンスがポップアップすると、ガベージコレクションのルートチェーンに入っている可能性が高くなります。 –

答えて

0

私はこの1つをフォローアップしたいと思います。 これは12.1に固定されているバグ10157396のように見えるOracleの技術サポートと、多くの電子メールの後、私は最終的にこれはバグとして受け入れてしまった

、11.2.0.4で修正される予定ですし、11.2.0.2にバックポートされました(パッチバンドル18で利用可能)。これは、BackOfficeが11.2.0.3にリリースされている間、または11.2.0.4がリリースされるまで、パッチ10098816(11.2.0.2)および13897456(Bundle 18)としてMyOracleSupportからダウンロードできます。

関連する問題