刚才被它唬了一把,幸好后来意识到了.

在性能计数器里的.net clr memory下有个# gc handles计数器, 这个计数器的值相比其他的是比较特殊的. 关于gc的计数器,绝大多数都是在gc结束的时候值才改变,但是这个却不是这样的. 比如当我们通过托管代码去请求创建一个handle,这时候这个值就加1了. 但是出于性能的考虑.net对它没有interlocked这样机制,所以这个值可能会在多个线程的并发情况下发生改变. 所以这个值其实是不可靠的.

那么怎么找到一个可靠的值呢?用SOS吧,它提供的gchandles命令能够准确的返回你要的结果.原理很简单,它遍历handle table.

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-11-02
  • 2021-06-07
  • 2022-12-23
  • 2021-09-03
猜你喜欢
  • 2022-12-23
  • 2021-09-13
  • 2021-10-03
  • 2021-08-25
  • 2021-04-20
  • 2021-10-22
相关资源
相似解决方案