如何测量一大块代码的时间,除非在断点处停止
How can one measure time for a large block of code except when stopped at a breakpoint?
我正在Windows上开发C++游戏/模拟/图形应用程序
(编辑开始)如果重要的话,我使用的是Visual Studio 2013(编辑结束)
设置:我正在使用QueryPerformanceCounter()测量从一帧到下一帧的时间。
复制步骤:在断点处停止进行某些调试。
当前不希望的结果:当应用程序恢复执行时,下次调用QueryPerformanceCounter()时,它将返回一个时间值,其中包括在调试器处暂停的所有时间。这导致帧时间长度异常大。
所需结果:QueryPerformanceCounter()将返回一个时间值,该值不包括我在断点处暂停调试所花费的时间。
我怎样才能达到预期的效果
1.我是否应该使用其他函数来代替QueryPerformanceCounter
2.IDE(即Visual Studio)中是否有可以更改的设置
3.是否有一些特殊的方法来使用QueryPerformanceCounter或其他时间函数
4.等
参考注释:这里列出了一个有点类似的问题,但它对我确定解决方案没有帮助。跟踪调试器中花费的时间
我不确定我是否理解你的意图。
- 在调试模式下测量持续时间是无用的。Debug和Release之间的差异是巨大的。在Debug和Release中,不同函数的不同执行时间之间的比率不一定相同
- 如果需要修复瓶颈,请使用探查器(在VC中转到Debug|profiler)
如果你仍然想在调试模式下测量时间,这里有一个想法:
#include <iostream>
#include <chrono>
#include <Windows.h>
struct duration
{
std::chrono::high_resolution_clock::time_point _s;
duration() : _s( std::chrono::high_resolution_clock::now() )
{
// nop
}
auto ms()
{
return std::chrono::duration<double, std::milli>( std::chrono::high_resolution_clock::now() - _s ).count();
}
};
struct breakpoint
{
std::chrono::high_resolution_clock::time_point _s;
duration& _d;
breakpoint( duration& a_d ) : _s( std::chrono::high_resolution_clock::now() ), _d( a_d )
{
__asm {int 3}
}
~breakpoint()
{
_d._s += std::chrono::high_resolution_clock::now() - _s;
}
};
int main()
{
duration d;
Sleep( 1000 );
std::cout << d.ms() << std::endl;
breakpoint { d };
Sleep( 1000 );
std::cout << d.ms() << std::endl;
return 0;
}
使用商业分析工具。衡量执行一个函数或方法所需的时间正是它们的初衷。
另外,您为什么要关心调试时某个东西花了多长时间?您是否计划在调试模式下向客户发布,并在他们玩游戏时逐行远程爬行?如果您想检查帧时间,请在启用优化的版本中检查它。
相关文章:
- C++为构建时间获取QDateTime的可靠方法
- 从持续时间构造std::chrono::system_clock::time_point
- 向量 <int> a {N, 0} 和 int arr a[N] = {0} 的时间复杂度有什么区别
- while循环中while循环的时间复杂度是多少
- 使用简单类型列表实现的指数编译时间.为什么
- 是否可以在编译时初始化数组,以便在运行时不会花费时间?
- 在已经使用Git的情况下减少编译时间
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 如何将包含epoch时间的十六进制字符串转换为time_t
- 从文本文件中读取时钟时间和事件时间并进行处理
- 具有未知值时的时间复杂性
- 如何减少花费的时间
- C++在变量给定的指定时间内关闭电脑
- rcpp函数中的清理时间很长
- C++:floor unix时间戳到UTC月份
- 无法删除指针,已触发断点
- 如何在c++中录制具有精确帧时间戳的视频
- 在两台机器之间进行时间戳的最佳c++chrono函数是什么
- 如何测量一大块代码的时间,除非在断点处停止
- DTN_DATETIMECHANGE断点和日期时间选取器控件是否存在问题