问一个简单问题:如何统计一个程序中正在使用的所有对象总数

runrunrun 2003-01-30 01:41:50
我想在性能测试时,这是一个很重要的指标。但又不知如何获取。
在垃圾收集时,应该有这个统计吧。
...全文
23 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
aspcn 2003-05-04
  • 打赏
  • 举报
回复
我靠,这贴还没有结啊.

针对于.Net的性能分析工具是有的..我在公司就用的是,不过名字太长,忘记了...

用了这么久还不错的说.
qqchen79 2003-02-15
  • 打赏
  • 举报
回复
http://msdn.microsoft.com/msdnmag/issues/01/12/hood/default.aspx

C++里面通过COM编程调用,如果在C#里面做,可能会把人累死。
runrunrun 2003-02-14
  • 打赏
  • 举报
回复
to qqchen79(知秋一叶 )
你说的东西我怎么找不到呀
runrunrun 2003-02-01
  • 打赏
  • 举报
回复
有什么专业的工具啊, 我知道的工具都是针对VC6的
aspcn 2003-02-01
  • 打赏
  • 举报
回复
如果你是为测试性能所用,你就用专业的工具吧。
查这个还不是小Case。
runrunrun 2003-02-01
  • 打赏
  • 举报
回复
谢谢qqchen79,过完年回单位我再试一试。

我的对象要是和GC里的一样多就好了,就算是人家不要的,总比没有强啊,哈
mikespook 2003-02-01
  • 打赏
  • 举报
回复
啊,啊,明白了~~~

哈哈,我看啊,是特别有情调。遍历整个GC Heap~~哈哈~~~放假了也不让机器闲着~~
qqchen79 2003-02-01
  • 打赏
  • 举报
回复
大过年的,在这里数对象,太没情调了。:)
qqchen79 2003-02-01
  • 打赏
  • 举报
回复
可以,但不容易。
.NET Framework提供了很多Performance Counter,但是没有统计对象个数的(因为这样一个总数对性能调试意义不大,对象大小不同)。相对来说,当前占用的内存总数要重要的多。而且统计对象总数需要遍历整个GC Heap,新能损失很大。

如果要实现的话,有两种方法,但都要用到.NET Profiling API.
1) 启动的时候注册ObjectAllocated事件,统计对象分配。并且在每次GC的时候更新对象总数。

2) 可以通过RootReference函数获得当前的RootReference对象,然后用ObjectReferences函数遍历整个GC Heap,统计对象。(这样所有尚未能GC的对象就不再统计当中了)。

两种方法都有一些误差,主要是如何处理已经没有用,但尚未GC的对象。
runrunrun 2003-01-31
  • 打赏
  • 举报
回复
在C++里也许不可能,但是在C#里肯定是可以的。垃圾收集器的原理就是这样子的:把所有的对象浏览一遍,没有被引用即被回收。我想计一个数应该很简单吧(对框架而言)。
mikespook 2003-01-30
  • 打赏
  • 举报
回复
所有对象?总数?这个恐怕不可能吧?如果是自己声明的一个类。然后判断属于这个类的对象的总数倒是有办法~
runrunrun 2003-01-30
  • 打赏
  • 举报
回复
高手都回家过年了吗
runrunrun 2003-01-30
  • 打赏
  • 举报
回复
UP

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧