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);