C++高精度性能测试函数

在实际software开发工作中,我们经常会测试某个module或者function的执行效率。或者是某个算法的时间复杂度(虽然时间复杂度一定程度上依赖于机器性能,但在同一台computer上,经过算法优化,可以测试其复杂度);这时候就需要精确获取时间,才可以准确的运行时间,下面的函数实现了精确计时,计时精度可以达到微秒级;可用于测试某个模块的效率!

//Purpose :this programme is designed for testing the performance of your code ,some function ect,
//it can show the time of spending on your running on it . it is  beneficial to improve your performance
//of code
// author :Jackery_shh
// data: July 8th  2015

#include<Windows.h>
#include<iostream>
#include<tchar.h>
using namespace std;
#define  IN

#ifdef _DEBUG
#define _Trace_Size 500
inline void FileTrace(IN LPCTSTR szFormat, ...)
{
	if (szFormat == NULL)
		return;

	TCHAR t_trace[_Trace_Size] = { _T(‘\0‘) };
	va_list vl = NULL;

	// 生成内容
	va_start(vl, szFormat);
	_vsntprintf_s(t_trace, _Trace_Size, _TRUNCATE, szFormat, vl);
	va_end(vl);
	OutputDebugString(t_trace);
}
#else
inline void FileTrace(IN LPCTSTR szFormat, ...){}
#endif

LARGE_INTEGER begin_time ,freq;

int main()
{
	LARGE_INTEGER begin_time ,freq;
	QueryPerformanceFrequency (&freq);
	QueryPerformanceCounter (&begin_time);
    //begin time
     for (long test0=0;test0<5000000;test0++)
     {
		 test0=test0+1;
     }
	LARGE_INTEGER end_time0; 

 	QueryPerformanceCounter (&end_time0);
	//after runnin the ‘for‘ loop statement,the time is Time0
 	double Time0 = ((double) (end_time0.QuadPart - begin_time.QuadPart)*1000.0) / (double) (freq.QuadPart);

    int test1=10000;
	while (test1)
	{
		test1--;
	}
 	LARGE_INTEGER end_time1;
	QueryPerformanceCounter (&end_time1);
 	double Time1 = ((double) (end_time1.QuadPart - begin_time.QuadPart)*1000.0) / (double) (freq.QuadPart);
    FileTrace(_T("*********************************************************************************\n"));
	FileTrace(_T("Test result is as follow :\ntime: %I64x, %.3fms, %.3fms\n"), (ULONGLONG)0, Time0, Time1);
	FileTrace(_T("*********************************************************************************\n"));
    system("pause");
	return 0;
}

test result is :

时间: 2024-11-13 08:17:47

C++高精度性能测试函数的相关文章

第3阶段——内核启动分析之start_kernel初始化函数(5)

内核启动分析之start_kernel初始化函数(init/main.c) stext函数启动内核后,就开始进入start_kernel初始化各个函数, 下面只是浅尝辄止的描述一下函数的功能,很多函数真正理解需要对linux相关体系有很深的了解后才能明白 代码如下: asmlinkage void __init start_kernel(void) { char * command_line; extern struct kernel_param __start___param[], __sto

十天学Linux内核之第七天---电源开和关时都发生了什么

原文:十天学Linux内核之第七天---电源开和关时都发生了什么 说实话感觉自己快写不下去了,其一是有些勉强跟不上来,其二是感觉自己越写越差,刚开始可能是新鲜感以及很多读者的鼓励,现在就是想快点完成自己制定的任务,不过总有几个读者给自己鼓励,很欣慰的事情,不多感慨了,加紧时间多多去探索吧,今天要去描述的是电源开和关时都发生了什么,一起去看看吧~~ bootloader引导装入程序将内核映像加载到内存并处理控制权传送到内核后在内核引导时每个子系统都必须要初始化,我们根据实际执行的线性顺序跟踪内核的

(转)start_kernel 代码分析

head-common.S---具体做了哪些动作---跳转到init/main.c ---b start_kernel//关于start_kernel的强文深入理解linux内核,第八章main.casmlinkage void __init start_kernel(void){char * command_line;extern struct kernel_param __start___param[], __stop___param[];//来设置smp process id,当然目前看到

【Go】strings.Replace 与 bytes.Replace 调优

原文链接:https://blog.thinkeridea.com/201902/go/replcae_you_hua.html 标准库中函数大多数情况下更通用,性能并非最好的,还是不能过于迷信标准库,最近又有了新发现,strings.Replace 这个函数自身的效率已经很好了,但是在特定情况下效率并不是最好的,分享一下我如何优化的吧. 我的服务中有部分代码使用 strings.Replace 把一个固定的字符串删除或者替换成另一个字符串,它们有几个特点: 旧的字符串大于或等于新字符串 (le

.NET导出Excel的四种方法及评测

.NET导出Excel的四种方法及评测 导出Excel是.NET的常见需求,开源社区.市场上,都提供了不少各式各样的Excel操作相关包.本文,我将使用NPOI.EPPlus.OpenXML.Aspose.Cells四个市面上常见的库,各完成一个导出Excel示例.然后对其代码风格和性能做一个横向比较.最后我将说出我自己的感想. 文中所有的示例代码可以在这里下载: https://github.com/sdcb/blog-data/tree/master/2019/20190824-dotnet

一个博文引起代码优化的思路

参考博文:一步步提升Go语言生成随机字符串的效率 根据自己的理解写出来的性能测试函数: package generateString import( "time" "testing" "math/rand" ) var letterRunes = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ") const letterBtyes = "ab

python threading --- 基于线程的并行

threading --- 基于线程的并行 这个模块在较低级的模块 _thread 基础上建立较高级的线程接口. 这个模块定义了以下函数: threading.active_count() 返回当前存活的线程类 Thread 对象.返回的计数等于 enumerate() 返回的列表长度. threading.current_thread() 返回当前对应调用者的控制线程的 Thread 对象.如果调用者的控制线程不是利用 threading 创建,会返回一个功能受限的虚拟线程对象. thread

Golang 单元测试与性能测试

Go 自带了测试框架和工具,在 testing 包中,以便完成单元测试(T 类型)和性能测试(B 类型).一般测试代码放在*_test.go 文件中,与被测代码放于同一个包中. 单元测试 测试函数名称格式是:Test[^a-z],即以 Test 开头,跟上非小写字母开头的字符串.每个测试函数都接受一个testing.T 类型参数,用于输出信息或中断测试. 测试方法有: Fail: 标记失败,但继续执行当前测试函数 FailNow: 失败,立即终止当前测试函数执行 Log: 输出错误信息 Erro

入门级----黑盒测试、白盒测试、手工测试、自动化测试、探索性测试、单元测试、性能测试、数据库性能、压力测试、安全性测试、SQL注入、缓冲区溢出、环境测试

黑盒测试 黑盒测试把产品软件当成是一个黑箱子,只有出口和入口,测试过程中只要知道往黑盒中输入什么东西,知道黑盒会出来什么结果就可以了,不需要了解黑箱子里面是如果做的. 即测试人员不用费神去理解软件里面的具体构成和原理,只要像用户一样看待产品就可以了. 例如银行转账功能,不需要知道转账的具体实现代码是怎样工作的,只需要把自己想象成各种类型的用户,模拟多种转账情况看系统是否能正常转账即可. 但是仅仅像用户一样去测试又是不够的.如果只做黑盒测试,必然是存在一定的风险的. 例如某个安全性较高的软件系统,