0

SQL データベースに支えられた SAP Business One を使用しています。データベースへのすべてのスクリプト化された書き込み/更新は、.Net/C# のマネージ COM を経由する必要があります。

COM 自体はワームの缶のようです。オブジェクトを明示的に解放する必要があるかどうか、また解放する場合はどのようにするかについて、誰もが意見を持っているようです。または、ガベージ コレクターに任せることもできます (または GC.Collect() を使用して強制することもできます)。 )。

一度に複数のドキュメント (SQL テーブル) を更新/挿入したい状況にあるため、これを行うためにトランザクションを使用しています。これは基本的に SQL で行うのと同じように機能します。

問題は、データベース トランザクション中に COM オブジェクトを破棄/解放する必要があるか、それともこれを延期して、COM オブジェクトへの参照が失われたりメモリ リークが発生したりするリスクを冒すべきかということです。この方法で COM オブジェクトを解放することのパフォーマンス ペナルティ/タイム コストはどれくらいですか?

TL;DR : データベース トランザクション内で COM オブジェクトを解放する必要がありますか、それとも完全に延期/無視する必要がありますか?

// pseudocode - greatly simplified

// case 1 - current setup
Transaction.Start();
comObject.subObject = new comSubOject();
comObject.Add();
Marshall.ReleaseComObject(comObject);
Marshall.ReleaseComObject(subObject);
Transaction.Commit();

// case 2 - ideal case, much harder to structure code this way
Transaction.Start();
comObject.subObject = new comSubOject();
comObject.Add();
Transaction.Commit();
Marshall.ReleaseComObject(comObject);
Marshall.ReleaseComObject(subObject);
4

0 に答える 0