
正文
vb.net内存泄露 net内存泄漏
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
vb.net 使用动态数组好不好?如果多次重定义有影响吗?急急急!!!
如果不要原来的数据,直接Redim a(199)
,所有数据清空,如果需要保留原来的数据,加上关键字preserve redim a(199)
,则保留原来数据,如此定义,不会造成内存泄露的
相关问答
Q1: 为什么玩完网游后浏览器会打不开
照你的描述,应该是中了木马了!
;url=http%3A//lucifergao%2Eblogbus%2Ecom/c1443885/p=8b2a94458ddf11a05beecf227f6496user=baidu
上这里瞧瞧,或许有你需要的问题的答案。
个人建议使用Ewido security suite 4.0.0.172c
一款网络安全防护软件,在电脑上已经安装的其它安全软件基础上,补充为一个完整的安全系统。plus版本能实时监测整个系统运行,监测内存,内核自保护,在线升级等。程序可识别并清除63,449种不同的黑客程序,木马程序,蠕虫程序,Dialers程序等! 全面保护你的网络安全!
另外,推荐使用冰刃 IceSword 1.22 中文版
这是一斩断黑手的利刃, 它适用于Windows 2000/XP/2003 操作系统, 其内部功能是十分强大, 用于查探系统中的幕后黑手-木马后门, 并作出处理. 可能您也用过很多类似功能的软件, 比如一些进程工具、端口工具, 但是现在的系统级后门功能越来越强, 一般都可轻而易举地隐藏进程、端口、注册表、文件信息, 一般的工具根本无法发现这些 "幕后黑手" .
两者联合查杀,功能强大,效果出色。
还有就是最好使用带主动防御的杀毒软件,个人推荐使用卡巴、瑞星2008、Nod32等等,在网上交流的时候能够最大程度地保护你的系统安全。
再有是安装功能齐备的防火墙,比如CBO、天网、瑞星等等。还可使用一些安全工具上的密码保险箱,以保护你的帐号密码安全。
防毒最后也是最重要的一招,是要养成良好的上网习惯,比如关闭系统的共享资源和容易被黑客及木马利用的漏洞和服务。每天使用电脑后及时清理使用痕迹,包括上网记录、IE临时文件、IE缓存文件、打开文档记录、清理剪贴板上的个人使用信息等等。
根据你所遇到情况的描述和问题补充,排除了病毒或是木马占用了太多的系统资源的话,那么就只剩下了电脑用户经常会遇到的“内存泄露”这个原因了。
在计算机科学中,内存泄漏指由于疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,失去了对该段内存的控制,因而造成了内存的浪费。
正如下文所说,内存泄漏与许多其他问题有着相似的症状,并且通常情况下只能由那些可以获得程序源代码的程序员才可以分析出来。然而,有不少人习惯于把任何不需要的内存使用的增加描述为内存泄漏,即使严格意义上来说这是不准确的。
一般我们常说的内存泄漏是指堆内存的泄漏。堆内存是指程序从堆中分配的,大小任意的(内存块的大小可以在程序运行期决定),使用完后必须显示释放的内存。应用程序一般使用malloc,realloc,new等函数从堆中分配到一块内存,使用完后,程序必须负责相应的调用free或delete释放该内存块,否则,这块内存就不能被再次使用,我们就说这块内存泄漏了。
后果
内存泄漏会因为减少可用内存的数量从而降低计算机的性能。最终,在最糟糕的情况下,过多的可用内存被分配掉导致全部或部分设备停止正常工作,或者应用程序崩溃。
内存泄漏可能不严重,甚至能够被常规的手段检测出来。在现代操作系统中,一个应用程序使用的常规内存在程序终止时被释放。这表示一个短暂运行的应用程序中的内存泄漏不会导致严重后果。
在以下情况,内存泄漏导致较严重的后果:
* 程序运行后置之不理,并且随着时间的流失消耗越来越多的内存(比如服务器上的后台任务,尤其是嵌入式系统中的后台任务,这些任务可能被运行后很多年内都置之不理);
* 新的内存被频繁地分配,比如当显示电脑游戏或动画视频画面时;
* 程序能够请求未被释放的内存(比如共享内存),甚至是在程序终止的时候;
* 泄漏在操作系统内部发生;
* 泄漏在系统关键驱动中发生;
* 内存非常有限,比如在嵌入式系统或便携设备中;
* 当运行于一个终止时内存并不自动释放的操作系统(比如AmigaOS)之上,而且一旦丢失只能通过重启来恢复。
简例
以下例子无需任何程式设计上的知识,但能表明如何导致内存泄漏及其造成的影响。注意以下的例子是虚构的。
在此例中的应用程式是一个简单软件的一小部分,用来控制升降机的运作。此部分软件当乘客在升降机内按下一楼层的按钮时运行。
当按下按钮时:
1. 得到内存,用作记住目的楼层
2. 把目的楼层的数字存储到内存
3. 升降机是否已到达目的楼层?
4. 如是,没有任何事需要做:程式完成
5. 否则:
1. 等待直至升降机停止
2. 到达指定楼层
3. 把刚才用作记住目的楼层的内存释出
此程式有一处会造成内存泄漏。如果在升降机所在楼层按下该层的按钮,内存就会一直被占用而不再释放。这种情况发生得越多,泄漏的内存则越多。
这个小错误不会造成即时影响。因为人不会经常在升降机所在楼层按下同一层的按钮。而且在通常情况下,升降机应有足够的内存以应付上百次、上千次类似的情况。不过,升降机最后仍有可能消耗完所有内存。这可能需要数个月或是数年,所以在简单的测试下这个问题不会被发现。
而这个例子导致的后果会是不那么令人愉快。至少,升降机不会再响应前往其他楼层的要求。更严重的是,如果程式需要内存去开启升降机门,那可能有人被困升降机内,因为升降机没有足够的内存去开启升降机门。
内存泄漏只会在程式运行的时间内持续。例如:关闭升降机的电源时,程式终止运行。当电源再度开启,程式会再次运行而内存会重置,而这种缓慢的泄漏亦会从头开始再次发生。
程式设计问题
内存泄漏是程式设计中一项常见错误,特别是使用没有内置自动垃圾回收的编程语言,如C及C++。一般情况下,内存泄漏发生是因为不能存取动态分配的内存。目前有相当数量的调试工具用于检测不能存取的内存,从而可以防止内存泄漏问题,如IBM Rational Purify、BoundsChecker、Valgrind、Insure++及memwatch都是为C/C++程式设计亦较受欢迎的内存除错工具。垃圾回收则可以应用到任何编程语言,而C/C++也有此类函式库。
提供自动内存管理的编程语言如Java、C#、VB.NET以及LISP,都不能避免内存泄漏。例如,程式会把项目加入至列表,但在完成时没有移除,如同人把物件丢到一堆物品中或放到抽屉内,但后来忘记取走这件物品一样。内存管理器不能判断项目是否将再被存取,除非程式作出一些指示表明不会再被存取。
虽然内存管理器可以回复不能存取的内存,但它不可以释放可存取的内存因为仍有可能需要使用。现代的内存管理器因此为程式设计员提供技术来标示内存的可用性,以不同级别的“存取性”表示。内存管理器不会把需要存取可能较高的对象释放。当对象直接和一个强引用相关或者间接和一组强引用相关表示该对象存取性较强。(强引用相对于弱引用,是防止对象被回收的一个引用。)要防止此类内存泄漏,开发者必须使用对象后清理引用,一般都是在不再需要时将引用设成null,如果有可能,把维持强引用的事件侦听器全部注销。
一般来说,自动内存管理对开发者来讲比较方便,因为他们不需要实现释放的动作,或担心清理内存的顺序,而不用考虑对象是否依然被引用。对开发者来说,了解一个引用是否有必要保持比了解一个对象是否被引用要简单得多。但是,自动内存管理不能消除所有的内容泄漏。
影响
如果一个程序存在内存泄漏并且它的内存使用量稳定增长,通常不会有很快的症状。每个物理系统都有一个较大的内存量,如果内存泄漏没有被中止(比如重启造成泄漏的程序)的话,它迟早会造成问题。
大多数的现代计算机操作系统都有存储在RAM芯片中主内存和存储在次级存储设备如硬盘中的虚拟内存,内存分配是动态的——每个进程根据要求获得相应的内存。存取活跃的页面文件被转移到主内存以提高存取速度;反之,存取不活跃的页面文件被转移到次级存储设备。当一个简单的进程消耗大量的内存时,它通常占用越来越多的主内存,使其他程序转到次级存储设备,使系统的运行效率大大降低。甚至在有内存泄漏的程序终止后,其他程序需要相当长的时间才能切换到主内存,恢复原来的运行效率。
当系统所有的内存全部耗完后(包括主内存和虚拟内存,在嵌入式系统中,仅有主内存),所有申请内存的操作将失败。这通常导致程序试图申请内存来终止自己,或造成分段内存访问错误(segmentation fault)。现在有一些专门为修复这种情况而设计的程序,常用的办法是预留一些内存。值得注意的是,第一个遭遇得不到内存问题的程序有时候并不是有内存泄漏的程序。
一些多任务操作系统有特殊的机制来处理内存耗尽得情况,如随机终止一个进程(可能会终止一些正常的进程),或终止耗用内存最大的进程(很有可能是引起内存泄漏的进程)。另一些操作系统则有内存分配限制,这样可以防止任何一个进程耗用完整个系统的内存。这种设计的缺点是有时候某些进程确实需要较大数量的内存时,如一些处理图像,视频和科学计算的进程,操作系统需要重新配置。
如内存泄漏发生在内核,表示操作系统自身发生了问题。那些没有完善的内存管理的计算机,如嵌入式系统,会因为一个长时间的内存泄漏而崩溃。
一些被公众访问的系统,如网络服务器或路由器很容易被黑客攻击,加入一段攻击代码,而产生内存泄漏。
其他内存消耗
值得注意的是,内存用量持续增加不一定表明内存泄漏。一些应用程式会储存越来越多资料到内存中(如用作快取。如果快取太大引起问题,这可能是程式设计上的错误,但并非是内存泄漏因为资料仍被使用。另一方面,程式有可能申请不合理的大量内存因为程式设计者假设内存总是足够运行特定的工作;例如,图像档案处理器会在开始时阅读图像档案的内容并把之储存至内存中,有时候由于图像档案太大,消耗的内存超过了可用的内存导致失败。
另一角度讲,内存泄漏是一种特殊的编程错误,如果没有源代码,根据征兆只能猜测可能有内存泄漏。在这种情况下,使用术语“内存消耗持续增加”可能更确切。
呵呵~~~~~~这里的叙述可能太专业了一些。其实,照我的想法,简而言之,如果出现应用程序停止响应这种情况,最简单有效的方法就是查看一下任务管理器中的进程项,看看哪个程序占用系统资源最多,手动结束它一般就可以解决问题了。如果在系统停止响应时用传统的方法无法调出资源管理器的话,再给你推荐一款小软件AntiFreeze:
安装运行后,在系统停止响应的时候用Ctrl+Atl+Win+Home组合键调出AntiFreeze,选中可能是引起故障的程序进程,再点击“End process”结束它即可,如果还不行就继续结束其他进程。
呵呵,啰嗦了这么多,希望能够帮助你解决问题啊!
Q2: Windows 下有哪些内存泄露监测工具
1. ccmalloc-Linux和Solaris下对C和C++程序的简单的使用内存泄漏和malloc调试库。
2. Dmalloc-Debug Malloc Library.
3. Electric Fence-Linux分发版中由Bruce Perens编写的malloc()调试库。
4. Leaky-Linux下检测内存泄漏的程序。
5. LeakTracer-Linux、Solaris和HP-UX下跟踪和分析C++程序中的内存泄漏。
6. MEMWATCH-由Johan Lindh编写,是一个开放源代码C语言内存错误检测工具,主要是通过gcc的precessor来进行。
7. Valgrind-Debugging and profiling Linux programs, aiming at programs written in C and C++.
8. KCachegrind-A visualization tool for the profiling data generated by Cachegrindand Calltree.
9. Leak Monitor-一个Firefox扩展,能找出跟Firefox相关的泄漏类型。
10. IE Leak Detector (Drip/IE Sieve)-Drip和IE Sieve leak detectors帮助网页开发员提升动态网页性能通过报告可避免的因为IE局限的内存泄漏。
11. Windows Leaks Detector-探测任何Win32应用程序中的任何资源泄漏(内存,句柄等),基于Win API调用钩子。
12. SAP Memory Analyzer-是一款开源的JAVA内存分析软件,可用于辅助查找JAVA程序的内存泄漏,能容易找到大块内存并验证谁在一直占用它,它是基于Eclipse RCP(Rich Client Platform),可以下载RCP的独立版本或者Eclipse的插件。
13. DTrace-即动态跟踪Dynamic Tracing,是一款开源软件,能在Unix类似平台运行,用户能够动态检测操作系统内核和用户进程,以更精确地掌握系统的资源使用状况,提高系统性能,减少支持成本,并进行有效的调节。
14. IBM Rational PurifyPlus-帮助开发人员查明C/C++、托管.NET、Java和VB6代码中的性能和可靠性错误。PurifyPlus 将内存错误和泄漏检测、应用程序性能描述、代码覆盖分析等功能组合在一个单一、完整的工具包中。
15. Parasoft Insure++-针对C/C++应用的运行时错误自动检测工具,它能够自动监测C/C++程序,发现其中存在着的内存破坏、内存泄漏、指针错误和I/O等错误。并通过使用一系列独特的技术(SCI技术和变异测试等),彻底的检查和测试我们的代码,精确定位错误的准确位置并给出详细的诊断信息。能作为Microsoft Visual C++的一个插件运行。
16. Compuware DevPartner for Visual C++ BoundsChecker Suite-为C++开发者设计的运行错误检测和调试工具软件。作为Microsoft Visual Studio和C++ 6.0的一个插件运行。
17. Electric Software GlowCode-包括内存泄漏检查,code profiler,函数调用跟踪等功能。给C++和.Net开发者提供完整的错误诊断,和运行时性能分析工具包。
18. Compuware DevPartner Java Edition-包含Java内存检测,代码覆盖率测试,代码性能测试,线程死锁,分布式应用等几大功能模块。
19. Quest JProbe-分析Java的内存泄漏。
20. ej-technologies JProfiler-一个全功能的Java剖析工具,专用于分析J2SE和J2EE应用程序。它把CPU、执行绪和内存的剖析组合在一个强大的应用中。JProfiler可提供许多IDE整合和应用服务器整合用途。JProfiler直觉式的GUI让你可以找到效能瓶颈、抓出内存泄漏、并解决执行绪的问题。4.3.2注册码:A-G666#76114F-1olm9mv1i5uuly#0126
21. BEA JRockit-用来诊断Java内存泄漏并指出根本原因,专门针对Intel平台并得到优化,能在Intel硬件上获得最高的性能。
22. SciTech Software AB .NET Memory Profiler-找到内存泄漏并优化内存使用针对C#,VB.Net,或其它.Net程序。
23. YourKit .NET Java Profiler-业界领先的Java和.NET程序性能分析工具。
24. AutomatedQA AQTime-AutomatedQA的获奖产品performance profiling和memory debugging工具集的下一代替换产品,支持Microsoft, Borland, Intel, Compaq 和 GNU编译器。可以为.NET和Windows程序生成全面细致的报告,从而帮助您轻松隔离并排除代码中含有的性能问题和内存/资源泄露问题。支持.Net 1.0,1.1,2.0,3.0和Windows 32/64位应用程序。
25. JavaScript Memory Leak Detector-微软全球产品开发欧洲团队(Global Product Development- Europe team, GPDE) 发布的一款调试工具,用来探测JavaScript代码中的内存泄漏,运行为IE系列的一个插件。
Q3: vb.net 程序运行久了以后崩溃
1、可能进入了死循环,仔细检查代码有无这种情况。
2、无用的数据一直在累积而没有及时销毁,导致内存占用越来越大,最终崩溃。要注意对象随用随清,及时 Dispose 掉或调用 GC.Collect。
Q4: 如何检测内存泄漏
内存泄漏指由于疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,失去了对该段内存的控制,因而造成了内存的浪费。
可以使用相应的软件测试工具对软件进行检测。
1. ccmalloc-Linux和Solaris下对C和C++程序的简单的使用内存泄漏和malloc调试库。
2. Dmalloc-Debug Malloc Library.
3. Electric
Fence-Linux分发版中由Bruce Perens编写的malloc()调试库。
4. Leaky-Linux下检测内存泄漏的程序。
5. LeakTracer-Linux、Solaris和HP-UX下跟踪和分析C++程序中的内存泄漏。
6. MEMWATCH-由Johan
Lindh编写,是一个开放源代码C语言内存错误检测工具,主要是通过gcc的precessor来进行。
7. Valgrind-Debugging and profiling Linux programs, aiming at
programs written in C and C++.
8. KCachegrind-A visualization tool for the profiling data
generated by Cachegrind and Calltree.
9. Leak
Monitor-一个Firefox扩展,能找出跟Firefox相关的泄漏类型。
10. IE Leak Detector
(Drip/IE Sieve)-Drip和IE Sieve leak
detectors帮助网页开发员提升动态网页性能通过报告可避免的因为IE局限的内存泄漏。
11. Windows Leaks
Detector-探测任何Win32应用程序中的任何资源泄漏(内存,句柄等),基于Win API调用钩子。
12. SAP Memory
Analyzer-是一款开源的JAVA内存分析软件,可用于辅助查找JAVA程序的内存泄漏,能容易找到大块内存并验证谁在一直占用它,它是基于Eclipse
RCP(Rich Client Platform),可以下载RCP的独立版本或者Eclipse的插件。
13. DTrace-即动态跟踪Dynamic
Tracing,是一款开源软件,能在Unix类似平台运行,用户能够动态检测操作系统内核和用户进程,以更精确地掌握系统的资源使用状况,提高系统性能,减少支持成本,并进行有效的调节。
14. IBM Rational PurifyPlus-帮助开发人员查明C/C++、托管.NET、Java和VB6代码中的性能和可靠性错误。PurifyPlus
将内存错误和泄漏检测、应用程序性能描述、代码覆盖分析等功能组合在一个单一、完整的工具包中。
15. Parasoft Insure++-针对C/C++应用的运行时错误自动检测工具,它能够自动监测C/C++程序,发现其中存在着的内存破坏、内存泄漏、指针错误和I/O等错误。并通过使用一系列独特的技术(SCI技术和变异测试等),彻底的检查和测试我们的代码,精确定位错误的准确位置并给出详细的诊断信息。能作为Microsoft
Visual C++的一个插件运行。
16. Compuware DevPartner for Visual C++ BoundsChecker
Suite-为C++开发者设计的运行错误检测和调试工具软件。作为Microsoft Visual Studio和C++ 6.0的一个插件运行。
17. Electric Software GlowCode-包括内存泄漏检查,code
profiler,函数调用跟踪等功能。给C++和.Net开发者提供完整的错误诊断,和运行时性能分析工具包。
18. Compuware DevPartner Java
Edition-包含Java内存检测,代码覆盖率测试,代码性能测试,线程死锁,分布式应用等几大功能模块。
19. Quest JProbe-分析Java的内存泄漏。
20. ej-technologies JProfiler-一个全功能的Java剖析工具,专用于分析J2SE和J2EE应用程序。它把CPU、执行绪和内存的剖析组合在一个强大的应用中。JProfiler可提供许多IDE整合和应用服务器整合用途。JProfiler直觉式的GUI让你可以找到效能瓶颈、抓出内存泄漏、并解决执行绪的问题。4.3.2注册码:A-G666#76114F-1olm9mv1i5uuly#0126
21. BEA JRockit-用来诊断Java内存泄漏并指出根本原因,专门针对Intel平台并得到优化,能在Intel硬件上获得最高的性能。
22. SciTech Software AB .NET Memory
Profiler-找到内存泄漏并优化内存使用针对C#,VB.Net,或其它.Net程序。
23. YourKit .NET Java Profiler-业界领先的Java和.NET程序性能分析工具。
24. AutomatedQA AQTime-AutomatedQA的获奖产品performance profiling和memory
debugging工具集的下一代替换产品,支持Microsoft, Borland, Intel, Compaq 和
GNU编译器。可以为.NET和Windows程序生成全面细致的报告,从而帮助您轻松隔离并排除代码中含有的性能问题和内存/资源泄露问题。支持.Net
1.0,1.1,2.0,3.0和Windows 32/64位应用程序。
25. JavaScript Memory Leak Detector-微软全球产品开发欧洲团队(Global Product
Development- Europe team, GPDE)
发布的一款调试工具,用来探测JavaScript代码中的内存泄漏,运行为IE系列的一个插件。
vb.net内存泄露的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于net内存泄漏、vb.net内存泄露的信息别忘了在本站进行查找喔。







