来自go的COM调用其数据由GC收集,将已用内存归零

时间:2014-02-27 02:18:37

标签: com go

我有一个执行WMI查询的go程序,然后将数据转换回go-land数据结构(使用方法here)。每隔一段时间,就会出现GC并且会将0的一些看似随机的内存部分核心化,造成可怕的破损。

我正在试图找出导致此问题的确切原因,我相信下一步是了解COM调用期间会发生什么。我目前的理解是:

  1. 使用来自进程的WMI查询调用COM
  2. 操作系统执行查询并将结果写入进程所拥有的某个内存位置
  3. 该位置从COM调用返回,然后我可以访问并序列化
  4. 这是关于会发生什么的? Windows如何选择内存位置,使其不会覆盖现有数据?

1 个答案:

答案 0 :(得分:1)

使用AddRef()和Release()计算每个COM对象的引用。也许您需要一个额外的AddRef()来保持更长时间。

我从示例代码中看到有很多deferred Release调用。这很好,因为我们希望在main结束时释放对象。在你的程序中,你可能想要推迟释放更长时间(但是,我不知道去或者究竟是什么延迟)