我们正在使用由SQL数据库支持的SAP Business One。对数据库的所有脚本编写/更新都必须通过.Net / C#中的托管COM进行。
COM本身看起来像是一堆蠕虫:每个人似乎都对是否需要明确释放对象有一个意见,如果是这样,或者你可以将它留给垃圾收集器(或强制使用GC)。收集())。我们想要同时对多个文档(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);