请教高手,C#如何找到泄漏的资源、什么是内存快照?顶着有分,谢谢

corn8888 2013-12-07 12:11:29
请教高手,C#如何找到泄漏的资源、什么是内存快照?顶着有分,谢谢
...全文
927 47 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
47 条回复
切换为时间正序
请发表友善的回复…
发表回复
corn8888 2013-12-09
  • 打赏
  • 举报
回复
引用 45 楼 yuwenge 的回复:
pen之类的托管对象,除非你真的吃饱了没事写了一个很长很长的循环,GC是可以自动回收的。
只是举例..........
卧_槽 2013-12-09
  • 打赏
  • 举报
回复
我见过最多的是DataReader open之后没close,函数就return了。于是没多久就报数据库连接池被占满。 pen之类的托管对象,除非你真的吃饱了没事写了一个很长很长的循环,GC是可以自动回收的。 楼上很多检测的工具都不错,可惜我从没用过。今天又学习了一点新东西。
corn8888 2013-12-09
  • 打赏
  • 举报
回复
引用 43 楼 sjyforg 的回复:
不明白你说的不好用是什么意思,我用起来觉得还是挺简单的。 网上有相关介绍的文章: http://www.cnblogs.com/eaglet/archive/2008/09/05/1285169.html http://lzy.iteye.com/blog/344317
谢哥们,Mem Profiler提示的泄漏资源,我怎么感觉不准确,还是我分析的不对?
申江渔夫 2013-12-09
  • 打赏
  • 举报
回复
不明白你说的不好用是什么意思,我用起来觉得还是挺简单的。 网上有相关介绍的文章: http://www.cnblogs.com/eaglet/archive/2008/09/05/1285169.html http://lzy.iteye.com/blog/344317
corn8888 2013-12-09
  • 打赏
  • 举报
回复
引用 40 楼 sjyforg 的回复:
我一般用.NET Memory Profiler。 stackoverflow上的相关贴子你可以参照一下 http://stackoverflow.com/questions/134086/what-strategies-and-tools-are-useful-for-finding-memory-leaks-in-net
哥们,.NET Memory Profiler好用吗,我怎么感觉不大好用,还是我不会用?
corn8888 2013-12-09
  • 打赏
  • 举报
回复
引用 37 楼 wanghui0380 的回复:
额, 为啥最近总拿这一个主线程的几乎无限循环代码在矫情是内存泄露??? 兄弟,如果你是在主线程里搞这类无限循环,不管你是代码基本都会一个效果,卡死UI,内存爆掉
我只是举个例子,可能不是在一个循环中,new了10000000,但也可能时间了,总共new了1000000,就会占着内存不放,直至程序退出。 中间就可能出现提示“内存不足”
申江渔夫 2013-12-09
  • 打赏
  • 举报
回复
wanghui0380 2013-12-09
  • 打赏
  • 举报
回复
主线程里,while(true)不写退出会是啥效果?效果和你描述的一样,UI卡死,内存崩溃? 那么这是不是要说while(true)也内存泄露了?? ok,你说你的循环不是个死循环,是有退出条件滴。但是我们的说,如果1w次循环可以让内存崩溃,那么你写1w次和写10001次,和while(true)完全木区别
Ahoo 2013-12-09
  • 打赏
  • 举报
回复
帮顶一下吧!
wanghui0380 2013-12-09
  • 打赏
  • 举报
回复
额, 为啥最近总拿这一个主线程的几乎无限循环代码在矫情是内存泄露??? 兄弟,如果你是在主线程里搞这类无限循环,不管你是代码基本都会一个效果,卡死UI,内存爆掉
水猿兵团五哥 2013-12-09
  • 打赏
  • 举报
回复
既然有实际问题,干嘛一直在说一些理论的东西? 拿出你的代码,拿出你的问题,这样大家的讨论会更贴切点,你也能得到你所需要的
  • 打赏
  • 举报
回复
除非你的程序太简单(例如只是用来配合人家宣传的一个小程序),否则误报一大堆。
bigbaldy 2013-12-08
  • 打赏
  • 举报
回复
引用 33 楼 corn8888 的回复:
但是有可能忘了,错误在所难免,而且用using,有时候不方便。 我现在就想找一款好的工具、有教程,用工具找出泄漏的资源
1.微软有Fxcop,免费的,好像可以检测 2.商业级的有Fortify,确定可以检测,我用过,哪有泄漏找得很清楚,而且修复建议里怎么改都给出了代码示例,并且可以自定义规则,不过好像没有破解版,单位花钱买的
corn8888 2013-12-08
  • 打赏
  • 举报
回复
引用 32 楼 bigbaldy 的回复:
[quote=引用 29 楼 corn8888 的回复:] 比如 for(int a=0; a<100000000; a++) { Pen pen = new Pen(Color.Green); } 虽然最后会释放资源,但是,软件会越用越慢,出现提示“内存不足”的现象

for(int a=0; a<100000000; a++)
{
    using(Pen pen = new Pen(Color.Green))
    {
        //todo
    }
}
养成这样写代码的习惯不就行了[/quote] 但是有可能忘了,错误在所难免,而且用using,有时候不方便。 我现在就想找一款好的工具、有教程,用工具找出泄漏的资源
bigbaldy 2013-12-08
  • 打赏
  • 举报
回复
引用 29 楼 corn8888 的回复:
比如 for(int a=0; a<100000000; a++) { Pen pen = new Pen(Color.Green); } 虽然最后会释放资源,但是,软件会越用越慢,出现提示“内存不足”的现象

for(int a=0; a<100000000; a++)
{
    using(Pen pen = new Pen(Color.Green))
    {
        //todo
    }
}
养成这样写代码的习惯不就行了
corn8888 2013-12-08
  • 打赏
  • 举报
回复
高手啊 高手,你 在哪儿?
corn8888 2013-12-07
  • 打赏
  • 举报
回复
引用 3 楼 Sky_Shout 的回复:
程序员研究到这个境界,说明你是一个真正的程序员了,



不管怎么样,看到哥们这样说,我高兴很!!!
  • 打赏
  • 举报
回复
嗯,你也可能被忽悠的不轻。
爱笑的男人998 2013-12-07
  • 打赏
  • 举报
回复
程序员研究到这个境界,说明你是一个真正的程序员了,下面有一点资料提供你参考下。

获取内存快照

C:/Documents and Settings/chen56>jmap
Usage:
jmap -histo <pid>
(to connect to running process and print histogram of java object heap
jmap -dump:<dump-options> <pid>
(to connect to running process and dump java heap)

dump-options:
format=b binary default
file=<file> dump heap to <file>

Example: jmap -dump:format=b,file=heap.bin <pid>

C:/Documents and Settings/chen56>jps
6888 FtpServer
7500 BoostMain
5876 BoostMain
6780 Jps
6264 BootMain

C:/Documents and Settings/chen56>jps
6888 FtpServer
5876 BoostMain
6264 BootMain
3124 Jps

C:/Documents and Settings/chen56>jmap -dump:format=b,file=e:/um2010121
61643.bin 5876
Dumping heap to E:/um201012161643.bin ...
Heap dump file created

C:/Documents and Settings/chen56>
  • 打赏
  • 举报
回复
这两个词儿,在c程序员那里可以乱说,因为c程序极其低级和单纯。 而托管系统下的程序比较灵活,框架丰富,程序模块和数据是动态的,地址是浮动的(映射的),因此这些词儿不适合照搬。
加载更多回复(23)

111,092

社区成员

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

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

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