有比Fmc好用最好的内存清理软件么

MyPrice分站
北京 重庆天津 山西
您现在的位置: &
& 兄弟 MFC-J220
目前共有产品412717种!
全部类别 == 手机通讯== 手机GPS导航仪及软件蓝牙耳机对讲机手机电池及配件电话机程控交换机VoIP网关集团电话IP集团电话会议电话电话语音卡录音电话网络电话== 数码== 数码相机数码摄像机MP3电子辞典/学习机MP4摄像头电子书点读机数码相框数码相机伴侣数码录音笔便携式DVD耳机高清播放机DVD视频刻录机CD机MD播放器数码及车载配件掌上电脑望远镜及夜视仪移动数字电视数字采编系统MP5播放器USB Hub移动电源== 笔记本整机== 笔记本台式电脑上网本平板电脑一体电脑服务器工作站笔记本配件工控产品笔记本包移动PC服务器配件准系统小型机DIY攒机单机多用户终端工作站配件电池及移动电源小型机配件== 办公设备== 激光打印机多功能一体机喷墨打印机集团电话传真机票据打印机考勤门禁收费投影机投影屏幕扫描仪支票打印复印机复合机电子白板电教板投影灯泡及配件展示台针式打印机装订机光盘拷贝机碎纸机排队机收款机点钞机指纹读取器软件加密保险箱条码及读卡设备身份证阅读器售饭机验钞机扎把机窗口对讲机办公设备配件== 网络设备== 路由器网络交换机网卡综合布线设备电缆与双绞线防火墙光纤设备光纤线缆收发器XDSL测试仪VPN及SSL VPN打印服务器模块接口卡转换器集线器ISDNModemKVM切换器串口通讯服务器网络延长器中继器UTM安全网关VPN软件物理安全隔离防毒及邮件过滤多串口卡计费系统远程访问服务器电力线通信设备网络代理服务器主控台服务器功能服务器邮件网关上网行为管理负载均衡工业以太网网络加速及优化流量管理复用器入侵检测与防御频宽管理邮件服务器== 无线网络== 无线局域网无线路由器无线上网卡无线网卡蓝牙适配器红外适配器无线视频无线安全功率放大器天馈系统无线网桥== 移动存储== 移动硬盘U盘及微硬盘闪存卡硬盘盒读卡器外置及共享硬盘MO磁光盘机工业电子盘== 数字家电== 液晶电视等离子家庭影院套装影碟机冰箱空调洗衣机便携式DVD高清播放机DVD视频刻录机== 安防== 考勤门禁收费安防监控防盗报警防雷产品楼宇对讲设备智能监控监控立杆 路灯杆 矩阵切换器监控红外灯电子巡更设备中央控制系统网络摄像机节能产品光端机呼叫中心多屏显示分配器== 摄影器材== 镜头摄影附件三脚架UV镜/CPL偏振镜摄影包数码相机闪光灯云台及附件数码摄像机电池及移动电源高坚效果镜测光表单反附件轻便相机独脚架单反相机镜头盖/机身盖镜头盖遮光罩增距镜广角镜快门线/遥控器手柄电池盒== 显示设备== 液晶电视等离子投影机CRT显示器液晶显示器液晶广告机液晶监视器车载显示设备LED显示设备大屏幕显示墙等离子配件电视墙触摸屏触控一体机医用显示器交互式电子书写屏== 网络存储== 磁盘阵列NAS网络存储器SAN网络存储SCSI及SAS卡SCSI及SAS硬盘SCSI及SAS配件磁带机磁带库外置及共享硬盘IP网络存储光盘库== 语音视频== 多媒体视频视频会议麦克风耳机放大器AV音箱麦克风支架多屏显示数码讲台手写屏电子讲台及课桌操作台与控制台== 游戏== 游戏设备游戏机跳舞毯屏幕贴膜== 软件== 办公软件杀毒软件操作系统网页制作数据库软件开发软件网络软件图像软件财务及管理软件教学软件软件加密多媒体软件入侵检测与防御排版软件网管及备份软件双机容错与集群数据维护软件行业管理软件信息安全内网安全软件== 印制设备== 大幅打印机一体化速印机行式打印机印后设备冷裱机切纸机数字化仪覆膜机塑封机条码打印机证卡打印机大幅面扫描仪折页配页机== 机房布线== 综合布线设备电缆与双绞线光纤设备光纤线缆测试仪机柜及控制台UPS电源精密空调防静电地板电池及移动电源工业电源铅酸蓄电池PDU电源分配器== 装机配件== CPU主板显卡硬盘内存笔记本配件散热器机箱刻录机电源CD-ROM服务器配件鼠标DVD-ROM键盘与键鼠套装COMBO光驱盒软驱声卡转接卡硬盘保护卡手写绘图输入RAID卡音箱耳机工作站配件视频采集卡固态硬盘SSD电脑锁鼠标垫== 办公耗材== 墨盒硒鼓墨水纸张色带光盘片墨粉连续供墨系统打印介质磁带软盘热升华耗材== 汽车电子== 汽车GPS导航仪及软件车载逆变电源车载显示设备车载逆变器数码及车载配件
兄弟 MFC-J220在线问题
目前该产品的统计信息
厂商服务热线:(您只需支付& 厂商联系电话:021-
共2行 当前 1/1 页
兄弟mfc-j220内存怎么清除
兄弟mfc-j220内存怎么清除
| 提问时间:
20:47:19 | 回复(2)
1.尊敬的用户、您好!
据您描述,我们判断有以下可能:
1、请检查内存中的作业,并取消
按功能键-上下键-传真-ok-上下键-残留任务-ok-1取消作业-停止/退出键
2、若有传真接收在内存中,请放入纸张-按启动键打印出来
--------------------------------------------------------------------------------
非常感谢您支持兄弟公司产品
若仍无法排除故障,请联系Brother特约维修站:http://www.brother.cn/fix.html
如果在操作中遇到问题的话,您可联系Brother全国服务热线:(仅收市话费)
客服中心传真:021-
兄弟(中国)商业有限公司网址:http://www.brother.cn
Brother服务和技术支持网站:http://welcome.solutions.brother.com/bsc/Public_s/index-asia.html
2.服务态度太差了,买了以后啥都不管,维修人员素质也差,!
MyPrice网友
回复:兄弟mfc-j220内存怎么清除
* 验证码:
按价格检索多功能一体机
按品牌检索多功能一体机
多功能一体机月关注排行
兄弟多功能一体机关注排行
MyPrice版权所有,未经授权禁止转载、摘编、复制或建立镜像。如果有问题,请发电子邮件给。谢谢!
& 网络实名:IT价格网 QQ:26被浏览8,907分享邀请回答269 条评论分享收藏感谢收起51 条评论分享收藏感谢收起最近在做MFC向Qt的移植,在内存管理方面遇到了很头疼的问题,虽然不知道问题到底出在哪,先了解下这两个库的内存管理方式。于是转载两篇关于内存管理的文章。
一. Qt内存管理:
在Qt的程序中经常会看到只有new而不delete的情况,其实是因为Qt有一套回收内存的机制,主要的规则如下:1.所有继承自QObject类的类,如果在new的时候指定了父亲,那么它的清理时在父亲被delete的时候delete的,所以如果一个程序中,所有的QObject类都指定了父亲,那么他们是会一级级的在最上面的父亲清理时被清理,而不用自己清理;2. 程序通常最上层会有一个根的QObject,就是放在setCentralWidget()中的那个QObject,这个QObject在 new的时候不必指定它的父亲,因为这个语句将设定它的父亲为总的QApplication,当整个QApplication没有时它就自动清理,所以也 无需清理。这里Qt4和Qt3有不同,Qt3中用的是setmainwidget函数,但是这个函数不作为里面QObject的父亲,所以Qt3中这个顶 层的QObject要自行销毁)。3.这是有人可能会问那如果我自行delete掉这些Qt接管负责销毁的指针了会出现什么情况呢,如果 这么做的话,正常情况下被delete的对象的父亲会知道这件事情,它会知道它的儿子被你直接delete了,这样它会将这个儿子移出它的列表,并且重新 构建显示内容,但是直接这样做是有风险的!也就是要说的下一条。4.当一个QObject正在接受事件队列时如果中途被你DELETE掉 了,就是出现问题了,所以Qt中建议大家不要直接DELETE掉一个QObject,如果一定要这样做,要使用QObject的 deleteLater()函数,它会让所有事件都发送完一切处理好后马上清除这片内存,而且就算调用多次的deletelater也不会有问题。5.Qt 不建议在一个QObject对象的父亲的范围之外持有对这个对象的指针,因为如果这样外面的指针很可能不会察觉这个QObject被释放,会出现错误。如 果一定要这样,就要记住你在哪这样做了,然后抓住那个被你违规使用的QObject的destroyed()信号,当它没有时赶快置零你的外部指针。当然 我认为这样做是及其麻烦也不符合高效率编程规范的,所以如果要这样在外部持有QObject的指针,建议使用引用或者用智能指针,如Qt就提供了智能指针 针对这些情况,见最后一条。6.Qt中的智能指针封装为QPointer类,所有QObject的子类都可以用这个智能指针来包装,很多用法与普通指针一样,可以详见Qt assistant通过调查这个Qt的内存管理功能,发现了很多东西,现在觉得虽然这个Qt弄的有点小复杂,但是使用起来还是很方便的,最后要说的是某些内存泄露的检测工具会认为Qt的程序因为这种方式存在内存泄露,发现时大可不必理会~原帖地址:http://blog.csdn.net/leonwei/archive//3703598.aspx
二. MFC内存分配方式与调试机制
1 内存分配
1.1 内存分配函数
&&&& MFCWin32或者C语言的内存分配API,有四种内存分配API可供使用。
Win32的堆分配函数
每一个进程都可以使用堆分配函数创建一个私有的堆──调用进程地址空间的一个或者多个页面。DLL创建的私有堆必定在调用DLL的进程的地址空间内,只能被调用进程访问。
HeapCreate用来创建堆;HeapAlloc用来从堆中分配一定数量的空间,HeapAlloc分配的内存是不能移动的;HeapSize可以确定从堆中分配的空间的大小;HeapFree用来释放从堆中分配的空间;HeapDestroy销毁创建的堆。
Windows传统的全局或者局部内存分配函数
由于Win32采用平面内存结构模式,Win32下的全局和局部内存函数除了名字不同外,其他完全相同。任一函数都可以用来分配任意大小的内存(仅仅受可用物理内存的限制)。用法可以和Win16下基本一样。
Win32下保留这类函数保证了和Win16的兼容。
C语言的标准内存分配函数
C语言的标准内存分配函数包括以下函数:
malloc,calloc,realloc,free,等。
这些函数最后都映射成堆API函数,所以,malloc分配的内存是不能移动的。这些函数的调式版本为
malloc_dbg,calloc_dbg,realloc_dbg,free_dbg,等。
Win32的虚拟内存分配函数
虚拟内存API是其他API的基础。虚拟内存API以页为最小分配单位,X86上页长度为4KB,可以用GetSystemInfo函数提取页长度。虚拟内存分配函数包括以下函数:
LPVOID VirtualAlloc(LPVOID lpvAddress,DWORD cbSize,DWORD fdwAllocationType,DWORD fdwProtect);
该函数用来分配一定范围的虚拟页。参数1指定起始地址;参数2指定分配内存的长度;参数3指定分配方式,取值 MEM_COMMINT或者MEM_RESERVE;参数4指定控制访问本次分配的内存的标识,取值为PAGE_READONLY、 PAGE_READWRITE或者PAGE_NOACCESS。
LPVOID VirtualAllocEx(HANDLE process,LPVOID lpvAddress,DWORD cbSize,DWORD fdwAllocationType,DWORD fdwProtect);
该函数功能类似于VirtualAlloc,但是允许指定进程process。VirtaulFree、VirtualProtect、VirtualQuery都有对应的扩展函数。
BOOL VirtualFree(LPVOID lpvAddress,  DWORD dwSize,  DWORD dwFreeType);
该函数用来回收或者释放分配的虚拟内存。参数1指定希望回收或者释放内存的基地址;如果是回收,参数2可以指向虚 拟地址范围内的任何地方,如果是释放,参数2必须是VirtualAlloc返回的地址;参数3指定是否释放或者回收内存,取值为 MEM_DECOMMINT或者MEM_RELEASE。
BOOL VirtualProtect(LPVOID lpvAddress,  DWORD cbSize,  DWORD fdwNewProtect,  PDWORD pfdwOldProtect);
该函数用来把已经分配的页改变成保护页。参数1指定分配页的基地址;参数2指定保护页的长度;参数3指定页的保护属性,取值PAGE_READ、PAGE_WRITE、PAGE_READWRITE等等;参数4用来返回原来的保护属性。
DWORD VirtualQuery(LPCVOID lpAddress,  PMEMORY_BASIC_INFORMATION lpBuffer,  DWORD dwLength  );
该函数用来查询内存中指定页的特性。参数1指向希望查询的虚拟地址;参数2是指向内存基本信息结构的指针;参数3指定查询的长度。
BOOL VirtualLock(LPVOID lpAddress,DWORD dwSize);
该函数用来锁定内存,锁定的内存页不能交换到页文件。参数1指定要锁定内存的起始地址;参数2指定锁定的长度。
BOOL VirtualUnLock(LPVOID lpAddress,DWORD dwSize);
参数1指定要解锁的内存的起始地址;参数2指定要解锁的内存的长度。
1.2 C++的new 和 delete操作符
&&& MFC定义了两种作用范围的new和delete操作符。对于new,不论哪种,参数1类型必须是size_t,且返回void类型指针。
全局范围内的new和delete操作符
原型如下:
void _cdecl ::operator new(size_t nSize);
void __cdecl operator delete(void* p);
调试版本:
void* __cdecl operator new(size_t nSize, int nType,
LPCSTR lpszFileName, int nLine)
类定义的new和delete操作符
原型如下:
void* PASCAL classname::operator new(size_t nSize);
void PASCAL classname::operator delete(void* p);
类的operator new操作符是类的静态成员函数,对该类的对象来说将覆盖全局的operator new。全局的operator new用来给内部类型对象(如int)、没有定义operator new操作符的类的对象分配内存。
new操作符被映射成malloc或者malloc_dbg,delete被映射成free或者free_dbg。
2 调试手段
&&& MFC应用程序可以使用C运行库的调试手段,也可以使用MFC提供的调试手段。两种调试手段分别论述如下。
2.1 C运行库提供和支持的调试功能
&&& C运行库提供和支持的调试功能如下:
调试信息报告函数
用来报告应用程序的调试版本运行时的警告和出错信息。包括:
_CrtDbgReport 用来报告调试信息;
_CrtSetReportMode 设置是否警告、出错或者断言信息;
_CrtSetReportFile 设置是否把调试信息写入到一个文件。
条件验证或者断言宏:
断言宏主要有:
assert 检验某个条件是否满足,不满足终止程序执行。
验证函数主要有:
_CrtIsValidHeapPointer 验证某个指针是否在本地堆中;
_CrtIsValidPointer 验证指定范围的内存是否可以读写;
_CrtIsMemoryBlock 验证某个内存块是否在本地堆中。
内存(堆)调试:
malloc_dbg 分配内存时保存有关内存分配的信息,如在什么文件、哪一行分配的内存等。有一系列用来提供内存诊断的函数:
_CrtMemCheckpoint 保存内存快照在一个_CrtMemState结构中;
_CrtMemDifference 比较两个_CrtMemState;
_CrtMemDumpStatistics 转储输出一_CrtMemState结构的内容;
_CrtMemDumpAllObjectsSince 输出上次快照或程序开始执行以来在堆中分配的所有对象的信息;
_CrtDumpMemoryLeaks 检测程序执行以来的内存漏洞,如果有漏洞则输出所有分配的对象。
2.2 MFC提供的调试手段
&&& MFC在C运行库提供和支持的调试功能基础上,设计了一些类、函数等来协助调试。
MFC的TRACE、ASSERT
使用ASSERT断言判定程序是否可以继续执行。
使用TRACE宏显示或者打印调试信息。TRACE是通过函数AfxTrace实现的。由于AfxTrace函数使用了cdecl调用约定,故可以接受个数不定的参数,如同printf函数一样。它的定义和实现如下:
void AFX_CDECL AfxTrace(LPCTSTR lpszFormat, ...){#ifdef _DEBUG // all AfxTrace output is controlled by afxTraceEnabledif (!afxTraceEnabled)#endif//处理个数不定的参数va_va_start(args, lpszFormat);int nBTCHAR szBuffer[512];nBuf = _vstprintf(szBuffer, lpszFormat, args);ASSERT(nBuf & _countof(szBuffer));if ((afxTraceFlags & traceMultiApp) && (AfxGetApp() != NULL))afxDump && AfxGetApp()-&m_pszExeName && ": ";afxDump && szBva_end(args);}#endif //_DEBUG
在程序源码中,可以控制是否显示跟踪信息,显示什么跟踪信息。如果全局变量afxTraceEnabled为 TRUE,则TRACE宏可以输出;否则,没有TRACE信息被输出。如果通过afxTraceFlags指定了跟踪什么消息,则输出有关跟踪信息,例如 为了指定&Multilple Application Debug&,令AfxTraceFlags|=traceMultiApp。可以跟踪的信息有:
enum AfxTraceFlags{traceMultiApp = 1, // multi-app debuggingtraceAppMsg = 2, // main message pump trace (includes DDE)traceWinMsg = 4, // Windows message tracingtraceCmdRouting = 8, // Windows command routing trace//(set 4+8 for control notifications)traceOle = 16, // special OLE callback tracetraceDatabase = 32, // special database tracetraceInternet = 64 // special Internet client trace};
这样,应用程序可以在需要的地方指定afxTraceEnabled的值打开或者关闭TRACE开关,指定AfxTraceFlags的值过滤跟踪信息。
Visual C++提供了一个TRACE工具,也可以用来完成上述功能。
为了显示消息信息,MFC内部定义了一个AFX_MAP_MESSAG类型的数组allMessages,储存了Windows消息和消息名映射对。例如:
allMessages[1].nMsg = WM_CREATE,
allMessages[1].lpszMsg = &WM_CREATE&
MFC内部还使用函数_AfxTraceMsg显示跟踪消息,它可以接收一个字符串和一个MSG指针,然后,把该字符串和MSG的各个域的信息组合成一个大的字符串并使用AfxTrace显示出来。
allMessages和函数_AfxTraceMsg的详细实现可以参见AfxTrace.cpp。
MFC对象内容转储
对象内容转储是CObject类提供的功能,所有从它派生的类都可以通过覆盖虚拟函数DUMP来支持该功能。在讲述CObject类时曾提到过。
虚拟函数Dump的定义:
class ClassName : public CObject{public:#ifdef _DEBUGvirtual void Dump( CDumpContext& dc )#endif&};
在使用Dump时,必须给它提供一个CDumpContext类型的参数,该参数指定的对象将负责输出调试信 息。为此,MFC提供了一个预定义的全局CDumpContext对象afxDump,它把调试信息输送给调试器的调试窗口。从前面AfxTrace的实 现可以知道,MFC使用了afxDump输出跟踪信息到调试窗口。
CDumpContext类没有基类,它提供了以文本形式输出诊断信息的功能。
CPerson* pMyPerson = new CP// set some fields of the CPerson object...//...// now dump the contents#ifdef _DEBUGpMyPerson-&Dump( afxDump );#endif
MFC对象有效性检测
对象有效性检测是CObject类提供的功能,所有从它派生的类都可以通过覆盖虚拟函数AssertValid来支持该功能。在讲述CObject类时曾提到过。
虚拟函数AssertValid的定义:
class ClassName : public CObject{public:#ifdef _DEBUGvirtual void AssertValid( )#endif&};
使用ASSERT_VALID宏判断一个对象是否有效,该对象的类必须覆盖了AssertValid函数。形式为:ASSERT_VALID(pObject)。
另外,MFC提供了一些函数来判断地址是否有效,如:
AfxIsMemoryBlock,AfxIsString,AfxIsValidAddress。
3 内存诊断
MFC使用DEBUG_NEW来跟踪内存分配时的执行的源码文件和行数。
把#define new DEBUG_NEW插入到每一个源文件中,这样,调试版本就使用_malloc_dbg来分配内存。MFC Appwizard在创建框架文件时已经作了这样的处理。
AfxDoForAllObjects
MFC提供了函数AfxDoForAllObjects来追踪动态分配的内存对象,函数原型如下:
void AfxDoForAllObjects( void (*pfn)(CObject* pObject,
void* pContext), void* pContext );
参数1是一个函数指针,AfxDoForAllObjects对每个对象调用该指针表示的函数。
参数2将传递给参数1指定的函数。
AfxDoForAllObjects可以检测到所有使用new分配的CObject对象或者CObject类派生的对象,但全局对象、嵌入对象和栈中分配的对象除外。
内存漏洞检测
仅仅用于new的DEBUG版本分配的内存。
完成内存漏洞检测,需要如下系列步骤:
调用AfxEnableMemoryTracking(TRUE/FALSE)打开/关闭内存诊断。在调试版本下,缺省是打开的;关闭内存诊断可以加快程序执行速度,减少诊断输出。
使用MFC全局变量afxMemDF更精确地指定诊断输出的特征,缺省值是allocMemDF,可以取如下值或者这些值相或:
afxMemDF,delayFreeMemDF,checkAlwaysMemDF
其中:allocMemDF表示可以进行内存诊断输出;delayFreeMemDF表示是否是在应用程序结束时 才调用free或者delete,这样导致程序最大可能的分配内存;checkAlwaysMemDF表示每一次分配或者释放内存之后都调用函数 AfxCheckMemory进行内存检测(AfxCheckMemory检查堆中所有通过new分配的内存(不含malloc))。
这一步是可选步骤,非必须。
创建一个CMemState类型的变量oldMemState,调用CMemState的成员函数CheckPoint获得初次内存快照。
执行了系列内存分配或者释放之后,创建另一个CMemState类型变量newMemState,调用CMemState的成员函数CheckPoint获得新的内存快照。
创建第三个CMemState类型变量difMemState,调用CMemState的成员函数Difference比较oldMemState和newMemState,结果保存在变量difMemState中。如果没有不同,则返回FALSE,否则返回TRUE。
如果不同,则调用成员函数DumpStatistics输出比较结果。
// Declare the variables needed#ifdef _DEBUGCMemoryState oldMemState, newMemState, diffMemSoldMemState.Checkpoint();#endif// do your memory allocations and deallocations...CString s = "This is a frame variable";// the next object is a heap objectCPerson* p = new CPerson( "Smith", "Alan", "581-0215" );#ifdef _DEBUGnewMemState.Checkpoint();if( diffMemState.Difference( oldMemState, newMemState ) ){TRACE( "Memory leaked!\n" );diffMemState.DumpStatistics();//or diffMemState.DumpAllObjectsSince();}#endif
MFC在应用程序(调试版)结束时,自动进行内存漏洞检测,如果存在漏洞,则输出漏洞的有关信息。
原帖地址:http://www.vczx.com/tutorial/mfc/mfc10.php
http://www.cnblogs.com/waytofall/archive//2307103.html
Views(...) Comments()内存清理工具哪个好?
内存清理工具哪个好?好用的内存清理工具推荐
  7、Mem Reduct(内存清理软件)
内存清理工具
  Mem Reduct是个迷你的内存监视和清理软件,号称可使应用程序的内存使用量下降25%左右。已汉化成中文使用了下,效果不错,感觉比魔方里面的内存整理强。
  Mem Reduct(内存清理软件)下载:
  8、智能内存释放精灵
内存清理工具
  实内存释放软件是众多系统优化软件中最鸡肋的一个。我个人建议你还是不要使用了。因为对于目前主流的windows操作系统来说,有一项重要的预读技术,每次你运行了一个程序退出以后,会在内存中保留一部分运行该程序所需要调用的文件。所以如果你开机后不停的运行程序最终将所有程序关闭,你也会发现内存占用比刚开机的时候大了不少,但是这些留在内存的程序或文件并不是没有意义的垃圾,当你第二次运行程序的时候由于一部分文件已经预读在内存中,所以启动速度会快很多。
  智能内存释放精灵下载:
大家都在下
还没关注下载之家微信 的亲们赶紧扫一扫左侧的二维码吧!或搜账号:
还没关注下载之家微信 的亲们赶紧扫一扫左侧的二维码吧!或搜账号:
微信公众号
Copyright &
下载之家(www.xiazaizhijia.com).All Rights Reserved
备案号:闽ICP备号-8
京公网安备 19号

我要回帖

更多关于 电脑内存清理哪个好 的文章

 

随机推荐