我们正在使用由 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);