当前位置:编程学习 > C#/ASP.NET >>

Winform内存问题。

winform程序太占内存了,请问有什么办法让他将下来吗?
程序采用的是多线程。 --------------------编程问答-------------------- 我的还好 --------------------编程问答-------------------- 少用控件吧,
要不然就从代码想办法,

及时释放, --------------------编程问答-------------------- 代码问题吧 拿来看看 --------------------编程问答-------------------- 最少7M,大一点多达1几M,封装的太多了,除非不用WINFORM,用 API SDK自己动手写 --------------------编程问答-------------------- 东西用了就释放掉把! --------------------编程问答-------------------- 尽量少用线程 --------------------编程问答-------------------- 还有什么需要注意的吗?请大家帮忙啦。
有什么工具能检测到内存的使用吗?好用的。 --------------------编程问答-------------------- 线程太多了 --------------------编程问答-------------------- 等到高手来解决 --------------------编程问答-------------------- 感觉和线程的关系不大,可能是你有东西没有及时的释放掉,或者是加载的数据太多了,不过8M的内存不算什么吧,现在的机子配置都不低 --------------------编程问答-------------------- 现在一个winform占用30M内存以内都不算高吧- -!看你程序多大了..

呵呵,我写的淘宝自动充值软件也是超多线程.!最多的时候也就10几M --------------------编程问答-------------------- 在Form的Disposing事件中,及时释放包括线程在内的非托管资源

在控制Form切换的地方,及时调用废弃Form的Dispose方法,并调用GC.Collect()一次或两次 --------------------编程问答-------------------- Form里面如果有方法被委托到线程中执行,也要及时结束线程或注销此委托。 --------------------编程问答--------------------
引用 12 楼 agentianle 的回复:
在Form的Disposing事件中,及时释放包括线程在内的非托管资源

在控制Form切换的地方,及时调用废弃Form的Dispose方法,并调用GC.Collect()一次或两次

GC.Collect()不好吧!很容易出问题的,最好用using之类的优化一下,让程序自己适时回收空间 --------------------编程问答-------------------- 楼主是不是在线程里操作控件啦 要及时结束线程或者委托 --------------------编程问答-------------------- .NET的内存问题,我研究过比较复制,虽然说有GC帮你做很多事,但是并不总是好用的。
.NET的应用内存在32位操作系统理论上支持3G,我们做的应用服务超过1G的情况也发生过,没有什么问题的。

如果发现内存过大,多数是有一些DATASET,DATATABLE这些大的对象没有释放,如果是界面层的话,在界面关闭的时候手工做一下DISPOSE和NULL,这样可以告诉内存可以清理了,也可以手工执行GC.COLLECT一下也行。

如果还是经常内存过大的话,只能用WINDBG这个工具抓内存镜像来分析,不过比较复杂。一般人不会用。
建议你用这个工具DebugDiag试试,帮你做了简单的分析。

--------------------编程问答--------------------
引用 14 楼 yingzhilian2008 的回复:
引用 12 楼 agentianle 的回复:
在Form的Disposing事件中,及时释放包括线程在内的非托管资源

在控制Form切换的地方,及时调用废弃Form的Dispose方法,并调用GC.Collect()一次或两次

GC.Collect()不好吧!很容易出问题的,最好用using之类的优化一下,让程序自己适时回收空间


请教一下,很容易出什么问题? --------------------编程问答-------------------- 每个窗体加载完之后,和关闭之前,可将其最小化,然后再最大化,内存就会减小.. --------------------编程问答-------------------- 10几M也算多,得看你是用来做什么的吧。 --------------------编程问答--------------------
引用 18 楼 benxiong_tb 的回复:
每个窗体加载完之后,和关闭之前,可将其最小化,然后再最大化,内存就会减小..

那是假的,放到虚拟内存中的,最大化的时候一部分还在虚拟内存中,用到的时候会再被调入内存,效率第,稳定性差 --------------------编程问答--------------------
引用 13 楼 agentianle 的回复:
Form里面如果有方法被委托到线程中执行,也要及时结束线程或注销此委托。


能用using的地方用它吧~ --------------------编程问答-------------------- 几M的确不算什么,若你觉得是你的东西很少,不符合实际,那就仔细看看是否是某些东西一直占用内存却没有被释放,一般都不需要显示去释放,但想文件操作流,内存流,GDI+ 里的某些成员等,还有就是17楼大哥说的显示注销委托。。。 --------------------编程问答-------------------- 学习并关注 --------------------编程问答-------------------- 学习一下 --------------------编程问答--------------------
引用 5 楼 shizhusz110 的回复:
东西用了就释放掉把!

不是.net滴?
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,