vb.net虚拟内存 visual studio调整虚拟内存( 八 )


当然 , vb.net虚拟内存我说的这种是比较简单的,还是需要设计思想 。
VB.NET窗体内容很多,会不会导致窗体最小化后在还原时很卡?所谓的“上位机传数据”,是指系统收到端口信息后,触发你代码中相应对象的事件,然后在事件处理代码中把数据写到窗体上的 。不管你内容多少 , 还原和最小化的运行速度都和上位机本身没有关系,你看很多程序在最小化还原后很卡,要么是程序写了很多还原时触发的代码,要么是系统内存不够,把窗体移到虚拟内存(硬盘)里了 。你可以用代码在窗体失去焦点激活的时候(Deactived事件)停止接收数据 , 还原时(Actived事件)再恢复
如何在.net应用中发现和避免内存和资源泄露尽管很多人相信在.net应用中谈及内存及资源泄露是件很轻松的事情 。但GC(垃圾回收器)并不是魔法师,并不能把你完全从小心翼翼处理内存与资源损耗中解放出来 。
本文中我将解释缘何内存泄露依然存在以及如何避免其出现 。别担心 , 本文不涉及GC内部工作机制及其它.net的资源及内存管理等高级特性中 。
理解泄露本身及如何避免其出现很重要,尤其因为它无法轻松地自动检测到 。单元测试在此方面无能为力 。一旦产品中你的程序崩溃了 , 你需要马上找出解决方案 。所以在一切都还不是太晚前,花些时间来学习一下本文吧 。
Table of Content
·介绍
·泄露?资源?指什么?
·如何检测泄露并找到泄露的资源
·常见内存泄露原因
·常见内存泄露原因演示
·如何避免泄露
·相关工具
·结论
·资源
介绍
近期,我参与了一个大的.net项目(暂叫它项目X吧),我在项目中负责追踪内存与资源泄露 。大部分时间我都花在与GUI关联的泄露上,更准确地说是一个基于Composite UI Application Block (CAB).的windows窗体应用 。接下来我要说的直接应用到winform上的内容 , 多数见解同样可以适用到其它.net应用中(像WPF,Silverlight,ASP.NET,Windows service,console application 等等) 。
我不是个处理泄露方面的专家,所以我不得不深入钻研了一下应用程序,做一些清理工作 。本文的目标是与你们分享在我解决问题过程中的所得所悟 。希望能够帮助那些需要检测与解决内存、资源泄露问题的朋友 。下面的概述部分首先会介绍什么是泄露,之后会看看如何检测到泄露和被泄露资源,以及如何解决与避免类似泄露 , 最后我会列出一个对此过程有帮助的工具列表及相关资源 。
泄露?资源?指什么?
内存泄露
在进一步深入前,让我们先来定义下我所谓的“内存泄露” 。简单引用在Wikipedia上找到的定义吧 。该定义与我打算通过本文所帮助解决的问题完美的一致:
在计算机科学领域中,内存泄露是指一种特定的内存损耗,该损耗是由一个计算机程序未成功释放不需要的内存引起的 。通常是程序中的BUG阻碍了不需要内存的释放 。
仍然来自Wikipedia:”以下语言提供了自动的内存管理,但并不能避免内存泄露 。像 Java,C#,VB.NET或是LISP等 。”
GC只回收那些不再使用的内存 。而使用中的内存无法释放 。在.net中 , 只要有一个引用指向的对象均不会被GC所释放 。
句柄与资源
内存可不是唯一被视为资源的 。当你的.net应用程序在Windows上运行时,消耗着一个完整的系统资源集 。微软定义了系统三类对象:用户(user),图形设备接口(GUI),以及系统内核(kernel) 。我不会在此给出完整的分类对象列表,只是指出一些重要的:
·系统通过使用用户对象(User objects) 来支持windows管理 。相关对象包括:提速缓冲表(Accelerator tables),Carets(补字号?),指针(Cursors),钩子(Hooks),图标(Icons),菜单(Menus)和窗体(Windows) 。

推荐阅读