b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

360安全卫士、腾讯电脑管家、鲁大师清理内存的功能

电脑杂谈  发布时间:2021-05-28 12:02:28  来源:网络整理

目前,有很多用于清理内存的工具,例如Wise Memory Optimizer,MemoryZipperPlus,SweepRAM等。系统工具(例如360 Security Guard,腾讯计算机管理器,Master Lu等)也具有清理内存的功能。

这些工具主要使用Windows提供的API:EmptyWorkingSet或SetProcessWorkingSetSize进行内存清理。

EmptyWorkingSet强制将进程工作集中的内存尽可能多地移到页面文件(从指定进程的工作集中删除尽可能多的页面。),函数原型为:

BOOL WINAPI EmptyWorkingSet(_In_ HANDLE hProcess);

SetProcessWorkingSetSize可以设置指定进程的最小和最大工作集大小。函数原型为:

BOOL WINAPI SetProcessWorkingSetSize(_In_ HANDLE hProcess,_In_ SIZE_T dwMinimumWorkingSetSize,_In_SIZE_T dwMaximumWorkingSetSize);其中,如果最后两个参数均为-1,则此函数的效果与EmptyWorkingSet相同。通过为最小和最大工作集大小指定值(SIZE_T)–1。这将从工作集中删除尽可能多的页面。 EmptyWorkingSet函数也可以用于此目的。)

使用上面介绍的API,我们可以实现自己的内存清理工具:

第一步是增加程序处理权限。这两个API函数都需要传入线程句柄以进行清理。句柄可以通过OpenProcess获得。如果进程权限不足,则该进程将无法打开。

确切地说,这不是提升权限,而是启用令牌中禁用的权限。 MSDN指出,如果需要打开其他进程并获得所有权限,则需要启用SeDebugPrivilege(要打开另一个进程的句柄并获得完全访问权限,必须启用SeDebugPrivilege特权。)

提升权限时,需要使用的API是:OpenProcessToken,LookupPrivilegeValue,AdjustTokenPrivileges,CloseHandle。有关MSDN(在C ++中启用和禁用特权)的详细用法说明。我不会在这里一一介绍。该程序如下。正确的上报零件代码:

BOOL EnableDebugPrivilege {BOOL bRet = FALSE; HANDLE hToken;如果(:: OpenProcessToken(GetCurrentProcess,TOKEN_ADJUST_PRIVILEGES,&hToken)){LUID luid; if(:: LookupPrivilegeValue(NULL,SE_DEBUG_GES,&luid)tp。TOKEN。PrivilegeCount = 1UL; tp.Privileges [0] .Luid = luid; tp.Privileges [0] .Attributes = SE_PRIVILEGE_ENABLED; if(:: AdjustTokenPrivileges(h, FALSE,&tp,sizeof(TOKEN_PRIVILEGES),NULL,NULL)){bRet = TRUE;}} :: CloseHandle(hToken);} return bRet;}第二步是遍历系统的所有进程,调用上述两个函数并传入一个进程的句柄,也就是说,每个调用仅用于一个进程的内存空间,因此我们还需要遍历整个系统的所有进程,然后获取每个进程的句柄处理,然后将句柄作为参数传递给上述两个函数,有很多方法可以遍历系统的所有过程,可以在此处使用ToolHelp API获得,使用了三个API函数:CreateToolhelp32Snapshot,Process32First和Process32Next。有关它们在MSDN上的用法的详细介绍(进行快照和查看过程) es),在此我不会一一介绍。

第三步自然是在上述遍历过程中调用EmptyWorkingSet或SetProcessWorkingSetSize来清理内存。实现代码如下。该代码使用SetProcessWorkingSetSize函数,并且过于懒惰,无法包含EmptyWorkingSet所需的Psapi.h头文件。

BOOL EmptyAllProcess {BOOL bRet = FALSE;处理hProcessSnap = :: CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); if(hProcessSnap!= INVALID_HANDLE_VALUE){PROCESSENTRY32 pe32; pe3 2. dwSize = sizeof(PROCESSEN3):: Process32First(hProcessSnap,&pe3 [kD]){do = :: OpenProcess(PROCESS_ALL_ACCESS,FALSE,pe3 2. th32ProcessID); if(hProcess){:: SetProcessWorkingSetSize(hProcess,(SIZE_T)-1,(SIZE_T)-1); :: CloseHandle(hProcess);}} while(:: Process32Next(hProcessSnap,&pe3 2)); bRet = TRUE;} :: CloseHandle(hProcessSnap);} return bRet;}

第四步,为了更直观地显示优化后腾出的内存空间,可以在清洗前后获得系统内存使用状态。此处使用GlobalMemoryStatusEx函数获取当前系统的物理内存和虚拟内存。也可以获取GlobalMemoryStatus函数,但是当内存超过4 GB时,结果是不正确的(在内存大于4 GB的计算机上,GlobalMemoryStatus函数可能返回错误的信息,报告值–1表示溢出。) 。请参考程序中MSDN上的示例以打印出内存使用情况。

为简单起见,该程序使用一个控制台项目。运行后,屏幕截图如下:

电脑内存清理大师

完整的程序和源代码下载链接:

阅读以上介绍后,相信大多数人会认为这是一种非常有效的方法,可以释放大量内存并显着减少内存使用量。众所周知,这个把戏实际上只是一种幻想,所有的努力只会使事情变得更糟!不相信,继续往下看。

为什么这样说,因为使用上述两个API不会减少程序的内存,而只是强制将正在运行的程序的工作内存写入Windows页面文件中。似乎内存使用率下降了,但实际上它只是将内存转移到慢速存储上。当程序需要再次使用这些内存时,由于该内存已移至页面文件中,因此虚拟内存位置被标记为“不存在”,然后将出现页面错误中断,通常称为页面错误。生成的。此时,操作系统必须将内存从硬盘移动到内存中。

例如,您正在观看视频,现在暂停它,然后使用内存清理工具“清理”内存。清理后,如果返回并继续播放视频或执行其他程序,则会发现该程序冻结了一些(特别是对于小型存储计算机)。冻结后,系统内存再次增加。一段时间后,内存使用率再次缓慢上升。如果在清理后立即使用程序并在系统任务管理器中查看过程信息(您需要在“选择列”对话框中选择“页面错误增量”),则会发现该程序的页面错误增量为显着增加,这次系统将内存移回工作集内存。

有一篇写得很好的文章详细解释了这个问题。链接到文章:单击以打开链接,并通过以下方式发布此文章:

为什么内存优化器和RAM比没有用的更糟

许多公司希望向您出售“内存优化器”,这通常是“ PC优化”程序的一部分。这些程序比没用的要糟,它们不仅不会加速您的计算机,还会降低计算机的速度。

此类程序利用了经验不足的用户,对提高性能做出了错误的承诺。不现实,您的计算机知道如何自行管理RAM。它将使用RAM来提高计算机的性能-RAM的位置完全没有意义。

您的计算机的RAM是否已满?很好!

内存优化器基于误解。您可能会查看计算机的RAM并看到它已满—例如,您可能有4 GB的RAM,并看到3 GB的空间已满,只有1 GB的备用空间。对于某些人来说,这可能令人惊讶-看起来Windows的Modernversion多么how肿!您将如何运行可用内存很少的其他程序?

实际上,现代操作系统非常擅长自行管理内存。 3 GB的已用RAM不一定表示浪费。而是,您的计算机使用您的RAM缓存数据以加快访问速度。无论是您在浏览器中打开的网页的副本,先前打开的应用程序,还是不久之后可能需要的其他任何类型的数据,您的计算机都将其挂在其RAM中。当您再次需要数据时,您的计算机不必打硬盘,它只需从RAM中加载文件即可。

至关重要的是,将RAM清空没有任何意义。即使您的RAM完全满了,并且计算机需要更多的内存来运行应用程序,您的计算机也可以立即丢弃RAM中缓存的数据,并将该空间用于该应用程序。没有必要将RAM留空–如果它是空的,那就浪费了。如果已满,它很有可能帮助加快程序加载时间以及其他可能会使用计算机硬盘驱动器的问题。

请注意,在下面的屏幕截图中,实际上只有很少的RAM是“可用”的。该RAM被用作缓存,但仍标记为可用于任何需要使用该程序的程序。

过去,完整的RAM确实表明存在问题。如果您在具有半GB RAM的计算机上运行Windows Vista,您可能会感觉到计算机在不断减速-它必须不断地读写硬盘,使用硬盘的页面文件作为RAM的低效替代品。但是,现代计算机通常为大多数用户提供足够的RAM。即使是低端计算机,通常也都带有4GB的RAM,除非您要进行密集的游戏,运行多个虚拟机或编辑视频,否则这应该绰绰有余。

即使RAM对您来说是个问题,也没有理由使用内存优化器。内存优化器是蛇油,在最好的情况下是无用的,在最坏的情况下是有害的。

内存优化器如何工作

使用内存优化器时,您会看到计算机的RAM使用率下降。这似乎是一个轻松的胜利-毕竟,只需按一下按钮,就可以减少RAM的使用。但这不是那么简单。

内存优化器实际上以两种方式之一工作:

·他们调用EmptyWorkingSet Windows API函数,迫使正在运行的应用程序将其工作内存写入Windows页面文件。

·他们迅速为自己分配了大量内存,从而迫使Windows放弃缓存的数据并将应用程序数据写入页面文件。然后,他们重新分配内存,将其保留为空。

这两个技巧实际上都将释放upRAM,使其为空。但是,所有这一切都会减慢速度-现在,您使用的应用程序将必须从页面文件中获取所需的数据,从硬盘驱动器中读取数据,并且需要更长的工作时间。用于缓存的任何内存都可能会被丢弃,因此Windows必须从硬盘驱动器中获取所需的数据。

换句话说,这些程序通过将所需的数据强制移入较慢的内存,从而不得不将其再次移回快速内存,从而释放了快速存储空间。这是没有道理的!它完成的所有工作都在向您出售不需要的另一个系统优化程序。

如果Windows需要RAM,它将以任何方式将数据推送到页面文件或丢弃缓存的数据。这一切都会在需要时自动发生-没有必要通过在必要时强制发生来放慢速度。

就像PC清洁应用程序一样,内存优化器是一个骗局。对于似乎不了解内存管理工作原理的人来说,它们似乎正在做一些积极的事情,但是实际上他们在做有害的事情。

如何真正“优化”您的记忆力

如果确实要有更多可用的RAM,请跳过内存优化器。相反,请尝试摆脱不需要的应用程序-从系统托盘中清除不必要的程序,禁用无用的启动程序,等等。

如果您确实需要更多的RAM,请尝试购买更多的RAM。 RAM相当便宜,使用提供的RAM安装指南之一安装它并不难。只需确保为计算机购买了正确的RAM类型即可。

本文详细分析了这种现象的性质。对于当前的操作系统,并不是您拥有的内存越多,程序运行的速度就越快。即使内存确实已用完,操作系统也会自动丢弃一些缓存的数据,同时从工作集中移动不常访问的页面,将它们临时保存在内存的“转换列表”中,或交换他们出来的页面文件。 ,绝对没有理由,不需要我们在不必要的时候做这些事情。

因此,上面实现的程序只是一个简单的演示,因此每个人都可以了解清理内存的实际原理。不建议(甚至说不应该)用于解决内存不足的问题。

如今,各种内存清理工具都使用上述方法,有些还允许自动清理。该程序每隔一定时间自动清理一次。。。了解这些工具后,您就会发现这些工具只是一个骗局。对于那些不了解内存管理的人来说,它们只是一种安慰。它们不仅没有帮助,而且会使您的系统变慢。

除了使用此方法外,某些清洁工具还会执行剧烈清洁。这些工具本身会占用大量内存,并会迅速填满您的内存。这时,系统将被迫丢弃大量缓存文件,并同时调用转换操作以将其他进程的存储空间转换为虚拟内存。之后,此类工具突然释放了他们申请的大量空间,使您感到已经释放了很多空间。与使用EmptyWorkingSet或SetProcessWorkingSetSize相比,使用这种蛮力清洁可以释放更多的内存空间,但是所谓的“清洁”过程也更昂贵,最终只会使事情变得更糟。

还有一些内存清理工具,这些工具也将终止一些闲置服务和某些进程的剩余项,以进一步减少内存使用(例如360 Security Guard)。此方法确实具有一定的效果,并且确实可以释放一定的空间。但是,由于可以终止的进程有限,并且这些进程占用的内存通常不会太大,并且通常无法释放太多的内存空间,因此优化效果并不明显。

总而言之,我个人认为诸如内存清理或内存优化之类的工具没有实际价值或实际意义。对于内存较小的计算机,它们只会使您的系统运行速度进一步降低。对于具有大内存的计算机,即使它们很有用,也没有理由使用它们。因此,要解决内存不足的问题,最有效的方法是插入记忆棒,插入记忆棒,插入记忆棒!


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shoujiruanjian/article-378706-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...