为什么C#程序运行后占用内存过高 无程序占用会不断增加

C#webbrower数据采集程序运行时占用内存不断增加-.NET技术/C#-c/c++-电脑编程网C#webbrower数据采集程序运行时占用内存不断增加-.NET技术/C#作者:wfygowxf 和相关&&
WebBrowser web = new WebBrowser();&
web.Navigate(&about:blank&);&
System.Windows.Forms.HtmlDocument htmlDoc = web.Document.OpenNew(true);htmlDoc.Write(source);这几条语句我是放在一个线程的函数中的,每次请求都会调用这个函数,随着时间的推移,我的程序占用的内存越来越大,最后崩溃了!我在想的是我应该怎么去释放我用后的webbrower对象,才能不让程序占用更多的内存!------回答---------------其他回答(20分)---------
你做的是winform程序吧,试试这个类吧!Winista.HtmlParser.dll,也是专门采集数据的网上关于这个类的方法也很多,我以前也是用WebBrowser 采集,但很麻烦,甚至取不到数据
相关资料:|||||||C#webbrower数据采集程序运行时占用内存不断增加-.NET技术/C#来源网络,如有侵权请告知,即处理!编程Tags:                &                    C# WinForm应用程序降低系统内存占用方法总结
C# WinForm应用程序降低系统内存占用方法总结
微软的 .NET FRAMEWORK 现在可谓如火如荼了。但是,.NET 一直所为人诟病的就是“胃口太大”,狂吃内存,虽然微软声称 GC 的功能和智能化都很高,但是内存的回收问题,一直存在困扰,尤其是 winform 程序,其主要原因是因为.NET程序在启动时,是需要由JIT动态编译并加载的,这个加载会把所有需要的资源都加载进来,很多资源是只有启动时才用的。
以XP 系统为例子,程序启动后,打开任务管理器,会看到占用的内存量比较大,你把程序最小化,会发现该程序占用的内存迅速减小到一个很小的值,再恢复你的程序,你会发现内存占用又上升了,但是比你刚启动时的内存占用值还是小的,这就是一个资源优化的过程,这个过程是操作系统主动完成的。
结论与展望:
创新设计大赛的项目已经快到交付的日期了,都说Winform占用内存大,于是想着看看自己写的基于手机邮件的远程关机软件(Mail_Based_Remote_Shutdown)占用内存情况,整个开发过程自己也在尽量写一些比较优美的代码来减少系统内存占用,今天看了下,刚打开时占用20M内存,然后一点点增加,最后到80多M,真是无法忍受,每次都是写了之后回过头来才发现自己的代码很丑,系统架构师的作用就体现出来了。
这里整理了一些网上关于Winform如何降低系统内存占用的资料,供参考:
1、使用性能测试工具dotTrace 3.0,它能够计算出你程序中那些代码占用内存较多2、强制垃圾回收3、多dispose,close4、用timer,每几秒钟调用:SetProcessWorkingSetSize(Process.GetCurrentProcess().Handle, -1, -1);具体见附录。5、发布的时候选择Release6、注意代码编写时少产生垃圾,比如String + String就会产生大量的垃圾,可以用StringBuffer.Append7、this.Dispose();&&& this.Dispose(True);&& this.Close();&&& GC.Collect();&& 8、注意变量的作用域,具体说某个变量如果只是临时使用就不要定义成成员变量。GC是根据关系网去回收资源的。9、检测是否存在内存泄漏的情况,详情可参见:内存泄漏百度百科
附录:定期清理执行垃圾回收代码:
//在程序中用一个计时器,每隔几秒钟调用一次该函数,打开任务管理器,你会有惊奇的发现&#region 内存回收[DllImport("kernel32.dll", EntryPoint = "SetProcessWorkingSetSize")]public static extern int SetProcessWorkingSetSize(IntPtr process, int minSize, int maxSize);/// &summary&/// 释放内存/// &/summary&public static void ClearMemory(){GC.Collect();GC.WaitForPendingFinalizers();if (Environment.OSVersion.Platform == PlatformID.Win32NT){App.SetProcessWorkingSetSize(System.Diagnostics.Process.GetCurrentProcess().Handle, -1, -1);}}#endregion
您可能感兴趣的文章:
发表评论:
TA的最新馆藏[转]&[转]&[转]&[转]&[转]&[转]&高级工程师
金币1908枚
贡献勋章0枚
阅读:2349回复:8
C#编写的程序,随着运行次数递增,占用内存越来越大
发布于: 20:08
C#编写的程序,随着运行次数递增,占用内存越来越大,打开软件时占用10MB,处理图像20000次后占用100MB,应如何合理释放资源?
最新喜欢:
高级工程师
金币1357枚
贡献勋章0枚
发布于: 08:49
如果你有内存释放的话,后面的要问高手了。
金币3265枚
贡献勋章1枚
发布于: 09:35
这个就需要跟踪调试你自己的代码了,这种问题都应该是某一个你调用而没有释放内存才会这样,仔细检查一下。
贡献勋章0枚
发布于: 10:50
程序连续运行,CPU占用率高的情况下,可能会使系统的垃圾回收器进程阻塞,让程序停止运行,交出CPU的控制权,看能不能降下来。:::垃圾回收器的优先级很低,CPU繁忙时可能无法及时回收内存。
高级工程师
金币1357枚
贡献勋章0枚
发布于: 08:00
我看例程,是调用action(),后面紧跟的是GC 垃圾回收调用。
贡献勋章0枚
发布于: 23:29
累计的空间,现在机器大已经无所谓了。单片机就不行要随时打扫。
贡献勋章0枚
发布于: 08:55
很多对象需要手动清理资源,例如HObject,在不使用的时候,要调用Dispose()方法手动释放其非托管资源
贡献勋章0枚
发布于: 21:54
在所有产生新的图像数据的代码前面进行内存释放,每个图像的类型都有dispose方法的,如:ho_Image.Dispose();
贡献勋章0枚
发布于: 16:38
set_system ('temporary_mem_cache', 'false')
您需要登录后才可以回帖,&或者&
Powered by}

我要回帖

更多关于 程序占用内存 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信