
首先,完全禁用虚拟内存是不可行的,很多程序没有虚拟内存就无法正常工作。
然后应该根据你使用的程序会占用的内存大小调整,比如说你需要用软件打开一个3G大小的文件,那么可能需要至少2G大小的虚拟内存。又或者你完全用不完25G的物理内存,那么虚拟内存设置到100甚至几十M即可。
其实一般来说让系统自动管理即可,完全没有必要手工调整大小,在Vista下,平时系统会把虚拟内存设置为跟物理内存一样大,当不够用时自动增加,这样做仅仅是会占用硬盘空间,平时的性能跟比较小的虚拟内存是完全一样的,并不会增加物理内存跟虚拟内存之间的交换次数。
当然,如果你认为用不完25G的内存,可以使用RamDisk之类的软件,用物理内存建立一个1G左右的虚拟硬盘,然后将虚拟内存放到这个虚拟硬盘上,这样既不会影响那些需要使用虚拟内存的软件,又可以做到完全不跟硬盘交换数据。不过这样做的坏处也很明显,就是当软件需要使用到25G以上内存的时候,系统没办法自动增加虚拟内存的大小。就我测试过的两个游戏的情况来看,《生化危机5 PC演示版》会报告内存不足后跳出,《魔兽世界》会直接跳出。
分类: 电脑/网络
解析:
解决内存不足六步曲
当你在Windows中纵横驰骋时,是否遇到过“内存不足”的错误提示信息,而不能运行程序或完成所需 *** 作的情况?此时,愿下述的六种方法能为你解燃眉之急。
一、剪贴板占用太多的内存
剪贴板是内存中的一块临时区域,用以存放从程序复制来的对象(如文本或图形)。如果剪贴板中现存放的是一幅图画或相当篇幅的一段文本,则占用相当大的内存,可能导致内存不足。解决方法就是清除剪贴板中的内容,具体过程是:
1、单击“开始”,指向“程序”,指向“附件”,指向“系统工具”,单击“剪贴板查看程序”,打开“剪贴板查看程序”窗口(如图2)。
2、单击“编辑”菜单中的“删除”命令,系统d出“清除剪贴板”对话框,单击“是”按钮。
3、单击“文件”菜单中的“退出”命令,关闭“剪贴板查看程序”窗口。
二、运行的程序太多
运行的程序太多,会引起内存资源的枯竭。这分为两种情况,一是在启动Windows后,用户运行的程序太多,或者在同一程序如Word中同时打开的文档过多,就可能引发内存不足,从而没有足够的内存运行其它程序或在程序中完成某一 *** 作。解决的方法是退出当前未使用的程序、关闭当前文档外的所有文档,或者重新启动计算机。
另一种情况是在启动Windows时自动运行的程序太多。如果在启动Windows时自动运行的程序太多,那么即使重新启动计算机,也将没有足够的内存用于运行其它程序。以下的方法可以确定自动运行的程序是否太多,具体过程是:
1、单击“开始”菜单中的“运行”命令,系统d出“运行”对话框,在“打开”框中键入“Msconfig”,单击“确定”按钮,打开“系统配置实用程序”窗口。
2、选择“常规”选项卡,选中“选择性启动”复选钮,清除“处理Winini文件”和“装载启动组项目”复选框(如图3)。
3、单击“确定”按钮,当系统提示重新启动计算机时,请单击“是”按钮。
此时,如果内存不足的问题已经解决,就可以将计算机设置为启动时不打开任何程序,方法是:
(1)在Msconfig中设置为“正常启动”,具体过程是:
A、打开“系统配置实用程序”窗口,选择“常规”选项卡;
B、选中“正常启动”复选钮,单击“确定”按钮;
C、当系统提示重新启动计算机时,单击“是”按钮。
(2)删除“启动”文件夹中的快捷方式,具体过程是:
A、单击“开始”,指向“设置”,然后单击“任务栏和开始菜单”,系统d出“任务栏 属性”对话框;
B、选择“开始菜单程序”选项卡(如图4),单击“删除”按钮,系统d出“删除快捷方式/文件夹”对话框;
C、在列表框中找到“启动”文件夹,单击其前的加号“+”(如果“启动”文件夹前没有加号,则表明没有设置为自动运行的程序,单击“关闭”按钮即可),以显示设置为自动运行的程序列表;
D、单击“启动”文件夹中的一个快捷方式,然后单击“删除”按钮(如图5)。此 *** 作将从“开始”菜单中删除快捷方式,但并不从硬盘中删除相应的程序。对于“启动”文件夹中的要删除的每一个快捷方式,重复此步骤;
E、单击“关闭”按钮,关闭“删除快捷方式/文件夹”对话框;
F、单击“确定”按钮,关闭“任务栏 属性”对话框。
(3)禁用从Winini文件加载的所有程序,具体过程是:
A、打开“系统配置实用程序”窗口,选择“Winini”选项卡;
B、双击“〔Windows〕”,清除“Load=”和“Run=”复选框(如图6);
C、单击“确定”按钮。
三、硬盘空闲空间不足
Windows以虚拟内存分页文件(Win386.swp)的格式使用硬盘空间,以模拟RAM(Random Access Memory的缩写,随机存储器,内存的一种)。如果硬盘中没有足够的可用空间用于虚拟内存分页文件,则会引起内存不足的错误。Windows虚拟内存分页文件Win386.swp(该文件保存在c:\Windows文件夹中)所在的驱动器最少需要的空闲空间就是该文件的大小。如果硬盘空闲空间不足,请增加磁盘可用空间,有三种方法:
1、清理磁盘。具体过程是:
(1)单击“开始”,指向“程序”,指向“附件”,指向“系统工具”,单击“磁盘清理程序”,系统d出“选择驱动器”对话框。
(2)单击“驱动器”下拉列表框右边的下三角箭头,选择要清理的磁盘,然后单击“确定”按钮(如图7)。稍候,系统d出“磁盘清理程序”对话框。
(3)在“要删除的文件”框中,复选要删除的文件类型(其后的数字是该类文件所占用的磁盘空间量),单击“确定”按钮(如图8)。
2、从磁盘中删除过期的不需要的文件。
3、删除从未使用过的文件。
四、让Windows管理虚拟内存
如果你的机器没有设置为让Windows管理虚拟内存,则启动计算机时可能会有问题,计算机可能无法正常工作,也可能收到“内存不足”的消息,或在运行某程序时出现相同的错误消息。设置让Windows管理虚拟内存的具体过程是:
1、单击“开始”,指向“设置”,单击“控制面板”,打开“控制面板”窗口。
2、双击“系统”,系统d出“系统 属性”对话框中,单击“性能”选项卡,然后单击“虚拟内存”按钮(如图9),系统d出“虚拟内存”对话框。
3、选中“让Windows管理虚拟内存设置—推荐”复选钮,单击“确定”按钮(如图10)。
4、单击“确定”按钮,关闭“系统 属性”对话框。
五、程序毁坏或病毒作怪
如果某个程序文件被毁坏,则可能导致内存问题。程序损坏后,我们只能删除并重新安装该程序。
如你的电脑感染了电脑病毒,同样可能引起内存不足的错误,导致程序不能运行。这时使用最新的防病毒软件查杀病毒后,内存不足的问题自然也就解决了。
六、请专业人员处理
如果你做了上述五项工作,内存不足的问题仍未解决,那就请你与系统管理员联系,寻求帮助。
1、检查C盘是否空间已满
2、到系统属性里检查虚拟内存设置,如果为内存的2倍以上就没问题。
3、如果以上2种都正常,就要查毒了。
一般windows默认下,虚拟内存最小值应为实际内存的15倍,最大值则为实际内存的3倍。
一般应用的话,windows默认的虚拟内存是够用,如果是运行那些比较吃内存的程序内存吃紧,就要适当加大虚拟内存(特别是在XP系统下),再不行就要考虑加大实际内存容量了!:em9
大家知道,系统内存的容量总是很有限的;尽管通过设置适当的虚拟内存,可以有效缓解系统内存不足的现象,可是系统内存资源总是会有被消耗完的时候。一般情况下,系统内存资源被消耗30%左右时,计算机运行速度就会明显下降,此时你就必须想办法对内存采取各种优化措施。为了能够确保内存优化及时到位,就必须要对系统内存容量的变化进行即时监视。要监视系统内存的变化,比较简单的方法,就是用鼠标右键单击系统任务栏,从d出的快捷菜单中,执行“任务管理器”命令;接着单击“任务管理器”窗口中的“性能”标签,在d出的图1标签页面中,就能查看到当前系统内存的容量大小了。
剪贴内容,及时清除
每次执行复制、剪切 *** 作时,被复制或被剪切的内容都会临时保存到系统内存中,倘若你复制的内容是一张图象或者是容量较大的内容的话,系统内存空间就会被占用不少,那么系统自身所能获得的内存容量将非常有限。为了能够消除系统内存不足的现象,你应该及时将剪贴板中的无效文件或图像清除掉。在清除剪贴板中的大容量信息时,可以按照如下步骤来进行:
依次单击“开始”/“程序”/“附件”/“系统工具”选项,从d出的下拉菜单中执行“剪贴板查看程序”命令,在随后出现的“剪贴板查看程序”窗口中,单击菜单栏中的“编辑”选项,再单击下拉菜单中的“删除”选项,这样系统就能自动将保存在内存临时存储区域中的剪贴板内容清除了,那么系统的内存空间就会释放出来。
bbschinesejia/dispbbsboardid=33&id=82821点击看虚拟内存及优化方法
打开 计算机管理(本地)。
在控制台树中,右键单击“计算机管理(本地)”,然后单击“属性”。
单击“高级”选项卡上的“性能选项”,然后在“虚拟内存”下面单击“更改”。
在“驱动器”列表中,单击包含要更改的页面文件的驱动器。
在“所选驱动器的页面文件大小”下面的“初始大小 (MB)”或“最大值 (MB)”框中以兆字节为单位键入新的页面文件大小,然后单击“设置”。
如果减少页面文件设置的最小值或最大值,则必须重新启动计算机来查看改动效果。增大通常不要求重新启动计算机。
为获得最佳性能,请将初始大小设成低于“所有驱动器上页面文件大小的总数”下的推荐大小。推荐大小等于系统随机存取存储器 (RAM) 数量的 15 倍。
通常,尽管日常使用需要大量内存的程序可能会增加页面文件的大小,但应当将页面文件保留为推荐大小。
要删除页面文件,请将初始大小和最大值都设为零。
如何设置虚拟内存 (微笑) 2004-7-14 17:01
1、虚拟内存的作用
内存在计算机中的作用很大,电脑中所有运行的程序都需要经过内存来执行,如果执行的程序很大或很多,就会导致内存消耗殆尽。为了解决这个问题,Windows中运用了虚拟内存技术,即拿出一部分硬盘空间来充当内存使用,当内存占用完时,电脑就会自动调用硬盘来充当内存,以缓解内存的紧张。举一个例子来说,如果电脑只有128MB物理内存的话,当读取一个容量为200MB的文件时,就必须要用到比较大的虚拟内存,文件被内存读取之后就会先储存到虚拟内存,等待内存把文件全部储存到虚拟内存之后,跟着就会把虚拟内里储存的文件释放到原来的安装目录里了。下面,就让我们一起来看看如何对虚拟内存进行设置吧。
2、虚拟内存的设置
对于虚拟内存主要设置两点,即内存大小和分页位置,内存大小就是设置虚拟内存最小为多少和最大为多少;而分页位置则是设置虚拟内存应使用那个分区中的硬盘空间。对于内存大小的设置,如何得到最小值和最大值呢?你可以通过下面的方法获得:选择“开始→程序→附件→系统工具→系统监视器”(如果系统工具中没有,可以通过“添加/删除程序”中的Windows安装程序进行安装)打开系统监视器,然后选择“编辑→添加项目”,在“类型”项中选择“内存管理程序”,在右侧的列表选择“交换文件大小”。这样随着你的 *** 作,会显示出交换文件值的波动情况,你可以把经常要使用到的程序打开,然后对它们进行使用,这时查看一下系统监视器中的表现值,由于用户每次使用电脑时的情况都不尽相同,因此,最好能够通过较长时间对交换文件进行监视来找出最符合您的交换文件的数值,这样才能保证系统性能稳定以及保持在最佳的状态。
找出最合适的范围值后,在设置虚拟内存时,用鼠标右键点击“我的电脑”,选择“属性”,d出系统属性窗口,选择“性能”标签,点击下面“虚拟内存”按钮,d出虚拟内存设置窗口,点击“用户自己指定虚拟内存设置”单选按钮,“硬盘”选较大剩余空间的分区,然后在“最小值”和“最大值”文本框中输入合适的范围值。如果您感觉使用系统监视器来获得最大和最小值有些麻烦的话,这里完全可以选择“让Windows管理虚拟内存设置”。
3、调整分页位置
Windows 9x的虚拟内存分页位置,其实就是保存在C盘根目录下的一个虚拟内存文件(也称为交换文件)Win386swp,它的存放位置可以是任何一个分区,如果系统盘C容量有限,我们可以把Win386swp调到别的分区中,方法是在记事本中打开Systemini(C:\Windows下)文件,在[386Enh]小节中,将“PagingDrive=C:WindowsWin
386swp”,改为其他分区的路径,如将交换文件放在D:中,则改为“PagingDrive=D:Win386swp”,如没有上述语句可以直接键入即可。
而对于使用Windows 2000和Windows XP的,可以选择“控制面板→系统→高级→性能”中的“设置→高级→更改”,打开虚拟内存设置窗口,在驱动器[卷标]中默认选择的是系统所在的分区,如果想更改到其他分区中,首先要把原先的分区设置为无分页文件,然后再选择其他分区。
区别在于游戏速度和视频处理能力不一样。
2根(相同大小的)内存的话,在主板支持的情况下可以形成双通道,这样会加快cpu和内存之间的速度,玩cf的时候更加流畅和视频处理能力更强,只有1根内存的话就不会有这种情况。
升级扩大电脑的内存容量,带来的最大的好处就是在不适用虚拟内存的情况下可以同时加载和运行更多的程序,内存占用率也就没那么高了,电脑开机后运行的所有程序都是寄存在内存中,CPU从内存中调取相关数据来运算处理,然后再返回到内存中,所以内存容量越大,那么这台电脑所能加载和运行的程序也就越多。
虚拟内存一般设置成物理内存的1-15倍即可!3G内存,设置成3G的虚拟内存就可以了。虚拟内存尽量设置成固定大小,这样可以有效防止磁盘文件碎片的产生。另外,设置多大的虚拟内存,也可以根据个人需要,如果就是看网页、常驻内存软件很少,普通办公用,那3G内存也可以不设置虚拟内存,这样可以提高机器运行速度。如果使用过程中出现内存不足的现象,也可以先加1G虚拟内存看看。一般来说,在内存够用的情况下,虚拟内存设置得越小越好。
超过8G的内存,普通家用的话,甚至可以不用设置虚拟内存,一般都够用。但如果是内存偏小的机器,比如某些256M内存的运行XP系统的电脑,虚拟内存可以设到3-4倍,可以解决内存不足的问题,但可能机器运行速度会受影响。
内存指令不能written,这是在电脑使用中经常出现的问题,内存是主板上的存储部件,是CPU直接与之沟通,并用其存放当前正在使用的数据和命令的重要部件。当你用键盘或鼠标输入某个命令后,CPU就会解释命令并将指令或程式载入到内存中,这样程序才能够被执行。而一旦内存发生问题了,程序就不能被执行,因此就产生了前面我们提到的“该内存不能为written”错误的警告。当然,出现了“该内存不能为written”的故障也不一定都是内存的问题,电脑中了病毒或木马以及运行的程序本身的Bug也会造成这种现象。很难分清究竟是什么原因造成的,一时半会不好排除,但没关系,按确定、取消,重启,即可。感兴趣的网友可用下述办法试着去解决:
1、打开的程序太多,如果同时打开的文档过多或者运行的程序过多,没有足够的内存运行其他程序,要随时关闭不用的程序和窗口。
2、自动运行的程序太多,关闭一些启动程序, 开始-运行-Msconfig---启动 ,除杀毒软件、输入法外一般的程序都可以关掉。
3、物理内存过小,加大物理内存;内存和主板没插好或其他硬件不兼容 重插内存或换个插槽 ;双内存不兼容 ,要使用同品牌的内存或只要一条内存 ;劣质内存条或内存条坏了 更换内存条;合理设置虚拟内存。
4、市电电压过大的波动,或者PC机上使用劣质电源,都会给内存带来损害,更换功率大、质量好的电源。
5、PC机箱内充满灰尘,或者PC工作环境相对潮湿,也会造成运行不正常。及时除尘。
6 、CPU、显卡散热问题 ,改善散热 。
7、硬盘有问题 ,扫描修复或更换硬盘 。
8 、驱动问题 重装更新驱动 。
9、非法 *** 作,系统无法执行。
10、 软件损坏 重装软件 ;软件有BUG 打补丁或更新到最新版本 ; 软件和系统不兼容 给软件打上补丁或是试试系统的兼容模式 ; 软件和软件之间有冲突 如果最近安装了什么新软件,卸载了试试 。
11、 系统本身有问题 有时候 *** 作系统本身也会有BUG,要注意安装官方发行的更新程序最好及时补上,必要时重装系统。
12、 病毒问题 杀毒 ;杀毒软件与系统或软件相冲突 由于杀毒软件是进入底层监控系统的,可能与一些软件相冲突,卸载试试 。
13、运行执行regedit进入注册表, 在进入:HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\ShellExecuteHooks下,这个键值下面应该只有一个正常的键值"{AEB6717E-7E19-11d0-97EE-00C04FD91972}, 如果有其他的我们可以将其它的全部删除,只保留这个默认键值。
14、试用命令排除
开始-运行- 输入cmd-- 回车,在命令提示符下输入下面命令
for %1 in (%windir%\system32\dll) do regsvr32exe /s %1
怕输入错误,可以复制这条指令,然后在命令提示符后击鼠标右键,打“粘贴”,回车,耐心等待,直到屏幕滚动停止为止。
运行在 Windows 下面的程序分配内存以便表现所需要的 不同类型的资源 可以将这些分配当作用来封装程序所需要的内存和其他任何资源状态的对象 应用程序正确运行时 系统将释放被使用的资源和内存 以便让系统中的其他程序使用 但有时候 如果应用程序出现错误 则资源状态或内存(或者这二者)都不会被正确释放 这就会造成资源或内存泄漏 这些错误可能是很难识别的 垃圾回收器 (GC) 负责确保程序所分配的 用于完成任务的内存能够在不需要开发人员关注它的情况下被释放 对垃圾回收了解得越多 就越能更好地构造程序与之配合使用 NET 中的对象是从称为托管堆的一片内存中分配来的 堆被描述为托管是因为您向它申请内存后 垃圾回收器会负责执行清理工作 这似乎需要很多开销 因为垃圾回收器必须跟踪在 NET 公共语言运行库 (CLR) 中所分配的每个对象 但实际上它工作得很有效率 对象可以是小型对象 可以包含少量整数或更大的数据 也可以包含数据库连接和很多状态信息 对象可以是独立的 也可以在内部包含或使用其他对象 GC 的工作是确定什么时候应当回收对象 以便释放内存供其他程序使用 当它认为它已被装满时就会对可以删除的对象作标记 然后从托管堆中将它们删除 当垃圾回收器试图分配新的对象 却发现托管堆没有更多的可用内存时 垃圾回收器就会认为它已被装满 GC 试图分配内存但确定它已被装满时 它将尝试清理已为您的应用程序分配的某些内存 以便为新对象腾出空间 GC 以略微不同的方式看待您的对象 并在决定什么时候回收它认为不再有用的对象时考虑到这些对象的差异 它这样做的一个方法是 它有一组根对象 用来确定哪些对象可以被回收 如果对对象的引用大体上属于如下分类中的某一个 则该引用就被看作是根 全局或静态对象指针 线程的堆栈上的所有局部变量和参数对象指针 或包含托管堆中的对象的指针的任何 CPU 寄存器 如果对象的引用是根引用 那么它可能有或可能没有与它关联的 还会在垃圾回收后幸存的子对象 GC 首先找到根对象 然后沿着引用找到被根引用的其他对象 以便避免回收这些对象 如图 所示 托管堆中有四个被分配的对象 (S)mall (L)arge (F)inalized 和 (R)eferenced 假设每个对象通过其主要特征(例如 小型对象都不会包含引用或其他组合)来标识自己 在堆中分配这些对象时 它们将相互紧邻地放在内存中 我也有一个位于 (G)lobal 范围的根引用 它包含对 Z 的引用 GC 开始垃圾回收时 它首先假设所有对象都是不必要的 直到这些对象被证明是需要的为止 对象基本上通过它 认识 谁或引用了谁 或谁引用了它或认识它 来证明自己是必要的 对于 GC 根引用为谁认识谁提供了起点 GC 从根对象开始沿着对象层次结构检查引用情况 以确定对象是否是可到达的 或是否有可能被另一个对象使用 如果对象被证明是可到达的 则它不是该垃圾回收周期的处理对象 如果对象被证明无法从任何引用到达它 则 GC 将把该对象标记为可回收 然后它会被丢弃 GC 使用 标记和压缩 方法 这意味着一旦 GC 确定对象是垃圾 则 GC 的另一个部分将删除无法到达的对象 并将压缩堆中的空间以确保分配将继续非常快速地进行 GC 以代的方式看待回收周期中所涉及的对象 每当对象被认为是可到达的时 它就会被提升到下一代 这意味着 引用您的对象的对象越多 或您的对象的 *** 作范围越大 它的存活时间就越长 GC 当前最多有三代 从 到 第 代通常填充较小 短期使用的对象 并且回收它们的次数最多 这意味着 如果您有小型或很少使用的对象 则它们将被频繁地回收 第 代和第 代是寿命更长和被更频繁访问的对象的储存库 因此被回收的频率更低 GC 中一个基本假设是 您的程序中有更小 寿命更短的对象 更频繁地清理它们对您有好处 理解这一点很重要 因为您设计系统的方式会对您使用多少内存和占用内存多长时间有巨大的影响 这是由于您的工作集将是大型的工作集 内存使用量越大 应用程序性能将降低得越多 字节以下的对象被认为是小型对象 并且从托管堆的主要部分直接分配 超过 字节的对象从托管堆的特殊部分(称为大型对象堆)分配 托管堆对待小型和大型对象的方式有两个主要差异 首先 小型对象在被压缩时将移到托管堆内 而大型对象则不是这样 其次 大型对象总是被当作第 代的一部分 而小型对象通常被当作第 代的一部分 如果您分配了很多短寿命的大型对象 这将造成第 代被更频繁地回收 由于从第 代到第 代越往后的回收成本越高 这将有损应用程序的性能 我想讨论的垃圾回收的最后一个方面是终结 (finalization) 的概念 当对象被 GC 回收时 终结帮助开发人员释放他们在其对象中使用的资源 对象需要实现 Finalize 方法才能完成该 *** 作 当对象要被销毁时 GC 将调用 Finalize 方法 以便允许对象清理它的内部资源和状态 在 C# 和托管 C++ 中 Finalize 方法实际上伪装在析构函数的语法 (~Object) 中 这里的 Finalize 方法与纯 C++ 中的 Finalize 方法之间的重大差异是 在 C# 和托管 C++ 中 只有当 GC 清理对象时才调用该方法 而在纯 C++ 的析构函数中 当对象脱离范围时才会调用该方法 将 Finalize 方法添加到您的对象中意味着它将总是被 GC 调用 但要小心 因为将 Finalize 方法添加到对象中时 该对象将总是会在对第一代的垃圾回收后幸存下来 因此 所有终结对象的寿命会更长 由于试图让 GC 尽可能有效地执行清理 因此 只有当您有非托管资源需要清理或者在对象创建成本高昂的特殊情况下(对象池) 才应当使用终结 让我们返回图 中的原始示例 该示例有一个托管堆 其中包含四个对象和一个根引用 如果在这个时候发生垃圾回收(这是由于这时不满足启动垃圾回收的条件 而开发人员手动干预造成的) 结果是 (S)mall 对象将被当作垃圾回收 大型对象将在该垃圾回收后幸存下来 因为大型对象被指派为第 代 被终结的对象被 GC 注意到 并且将调用 Finalize 方法 但是对象本身仍将保留下来 直到进行下一次垃圾回收为止(在某些情形下可能会更长) 包含根引用 G 的对象将保留下来 因为它是根引用 是可到达的 现在 让我们假设下一次发生的垃圾回收针对的是第 到第 代(可以通过调用 System GC Collect 方法并将 作为参数来完成该 *** 作) (L)arge 对象将在第 代清理期间被回收 而 (F)inalized 对象在第 代回收期间被回收 这是因为 Finalize 已被调用并且已在回收开始之前结束 *** 作 只有包含全局引用的对象仍然存在 因而会在应用程序生存期内保留下来 良好的内存使用率 GC 负责处理内存泄漏 但它不能防止内存保留 作为开发人员 您可以控制您的对象的生存期 如果可以减少应用程序的工作集 则性能将有所提高 如果您的应用程序被设计为有很多对象长时间存活 则可能会有内存泄漏 即使最后清理了内存 仍然会有损性能 所以知道您的对象存活多长时间是值得的 GC 可以提供很大帮助 但它只能处理我讨论过的一种原始类型的泄漏 资源泄漏仍然是个问题 但如果将非托管资源包装在终结类中 GC 仍然可以帮助您确保正确处置它们 最好对对象实现 Close 或 Dispose 方法 以便在使用完对象时资源可以尽可能早得到清理 而不用等待 GC 来清理它们(在您停止使用对象后 等待 GC 清理它们可能需要很长时间) 如果您对使用非托管资源的类实现了 Finalize 并且正在使用托管堆 则可以相当安全地避免真正的泄漏 当然 这并不意味着您应当让应用程序的工作集很庞大 因为这仍然会有损性能 Profiler API 概述 为了说明应用程序使用了多少内存 以及对象存在了多久 我开发了一个称为 MemoryUsage 的应用程序 MemoryUsage 有两个不同的部分 第一部分编写为 C# 应用程序 它将启动要监视的进程 并在目标进程中设置一个环境变量 以指示 CLR 应当加载 NET 分析器 (profiler) 第二部分编写为基于 C++ 的 NET 分析器 该分析器名为 MemProfiler CLR 将通过环境变量中的信息加载它 NET 分析器是使用作为 CLR 的一部分提供的 Profiler API 来编写的 它允许分析器作为被监视的进程的一部分运行 并在发生某些事件时接收通知 当应用程序执行时 它为您提供各种通知 为了从 CLR 接收这些通知 您要提供一个 Profiler API 中指定的回调接口 (ICorProfilerCallback) 然后 当各种事件发生时 CLR 将调用这个回调接口的方法(参见图 ) 下面是需要注意的主要分析器回调方法 RuntimeSuspendStarted RuntimeSuspendFinished RuntimeResumeStarted ObjectAllocated ObjectsAllocatedByClass MovedReferences RootReferences 和 ObjectReferences 如果不熟悉 Profiler API 可以阅读 Profiler doc(位于 Visual Studio NET 安装目录下面的 \FrameworkSDK\Tool Developers Guide\docs 文件夹中) 来了解某些更深入的信息 使用分析器时有几件事情要考虑到 包括线程安全和同步 以及分析器对性能的影响 Profiler API 实际上允许您将它作为 CLR 的一部分运行 这样 因为多个线程将调用您的分析器 所以您必须知道存在同步问题 Microsoft 提供的 Profiler API 规范声明 回调不会被序列化 这就需要由开发人员自己来正确保护他的代码 方法是创建线程安全的数据结构 并在一旦需要防止多个线程并行访问代码时锁定分析器代码 我需要使对对象跟踪系统以及在我 lishixinzhi/Article/program/Java/hx/201311/27123
以上就是关于我加了根2G内存条,应该怎样调虚拟程序全部的内容,包括:我加了根2G内存条,应该怎样调虚拟程序、“内存不足”的几大原因及解决方案、玩cf一根内存条和2根的区别等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)