Vaa3D_内存、运行时间统计_windows

windows系统下,包含Windows.h和Psapi.h即可调用api获取尖峰内存消耗等信息。

可以自己修改内存、时间等的记录单位。
用法是通过addCheckPoint函数,记录当前占用的内存和运行的时间。
数据会被记录在 timePoint memoryPoint; zhushi; 这三个vector变量中。

然后在程序结束以后,通过print2File函数将记录的信息输出到文件中。
print2File这个函数可以根据自己的需要进行一定的修改。

MemoryTimeCount mt_count;
mt_count.addCheckPoint("prepare");mt_count.print2File(QString filename);
#include "memorytimecount.h"MemoryTimeCount::MemoryTimeCount()
{//需要记录的内容有   程序的起始时间   time=time.currentTime();time.start();PeakWorkingSetSize=0;WorkingSetSize=0;PeakPagefileUsage=0;PagefileUsage=0;PrivateUsage=0;LogCurrentProcessMemoryInfo();
}
#ifndef MEMORYTIMECOUNT_H
#define MEMORYTIMECOUNT_H#include
#include
#pragma  once
#pragma  comment(lib,"Psapi.lib")
#include
#include
#include
#include
using namespace std;class MemoryTimeCount
{
public:QTime time;int ini_time;QVector<int> timePoint;QVector<int> memoryPoint;QVector<QString> zhushi;void addCheckPoint(QString tmp){zhushi.push_back(tmp);setCheckCurrentState();}QString Note2String(){QString tmp="Notes\n";for(int i=0;i<zhushi.size();i++){tmp.append(zhushi[i]);tmp.append("\t");}tmp.append("\n");return tmp;}void setCheckCurrentState(){setCheckTime();setCheckMemory();}void setCheckTime(){timePoint.push_back(time.elapsed()/1000);}void setCheckMemory(){memoryPoint.push_back(WorkingSetSize);LogCurrentProcessMemoryInfo();}QString GetPeakMemoryAndTime2String(){QString temp=QString::number(PeakWorkingSetSize);temp.append("\n");if(timePoint[timePoint.size()>1]){temp.append(QString::number(timePoint[timePoint.size()-1]));}else{temp.append(QString::number(-1));}temp.append("\n");return temp;}QString GetTime2String(){QString tmp="time point(s)\n";for(int i=0;i<timePoint.size();i++){QString num=QString::number(timePoint[i]);tmp.append(num);tmp.append("\t");}tmp.append("\n");return tmp;}QString GetMemory2String(){QString tmp="Memory point(MB)\n";for(int i=0;i<memoryPoint.size();i++){QString num=QString::number(memoryPoint[i]);tmp.append(num);tmp.append("\t");}tmp.append("\n");tmp.append("\nlatest MemorySize\n");tmp.append("PeakWorkSetSize      \t  ").append(QString::number(PeakWorkingSetSize)).append("\n");tmp.append("WorkingSetSize       \t  ").append(QString::number(WorkingSetSize    )).append("\n");tmp.append("PeakPagefileUsage    \t  ").append(QString::number(PeakPagefileUsage )).append("\n");tmp.append("PagefileUsage        \t  ").append(QString::number(PagefileUsage     )).append("\n");tmp.append("PrivateUsage         \t  ").append(QString::number(PrivateUsage      )).append("\n");tmp.append("\n");return tmp;}void print2File(QString filename){//创建文件对象QFile file;//关联文件名字file.setFileName(filename);//打开文件,只写方式bool isOK = file.open(QIODevice::WriteOnly);if (isOK == true){file.write(GetPeakMemoryAndTime2String().toUtf8().data());file.write(Note2String().toUtf8().data());file.write(GetTime2String().toUtf8().data());file.write(GetMemory2String().toUtf8().data());}file.close();}//显示当前程序的内存使用情况void LogCurrentProcessMemoryInfo(){HANDLE handle=GetCurrentProcess();PROCESS_MEMORY_COUNTERS_EX pmc = {0};
//        int a = sizeof(pmc);if (!GetProcessMemoryInfo(handle,(PROCESS_MEMORY_COUNTERS*)&pmc,sizeof(pmc))){return;}PeakWorkingSetSize=pmc.PagefileUsage/1024/1024;WorkingSetSize=pmc.WorkingSetSize/1024/1024;PeakPagefileUsage=pmc.PeakPagefileUsage/1024/1024;PagefileUsage=pmc.PagefileUsage/1024/1024;PrivateUsage=pmc.PrivateUsage/1024/1024;}MemoryTimeCount();
private:long long  PeakWorkingSetSize;long long  WorkingSetSize;long long  PeakPagefileUsage;long long  PagefileUsage;long long  PrivateUsage;};#endif // MEMORYTIMECOUNT_H

注意

这个头文件的顺序不能改变,否则有可能发生变异错误

#include
#include
#pragma  once
#pragma  comment(lib,"Psapi.lib")


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部