Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在C+中测量函数调用的执行时间+;_C++_Windows_Execution Time_Boost Multi Index - Fatal编程技术网

C++ 在C+中测量函数调用的执行时间+;

C++ 在C+中测量函数调用的执行时间+;,c++,windows,execution-time,boost-multi-index,C++,Windows,Execution Time,Boost Multi Index,如何在C++和Windows中测量一行代码的执行时间。我正在插入大约100000条记录boost::multi_index_container,如下所示: while(...) //read a single record from a csv file until EOF { ... while(...) // split the record into components based on delimiter { ... } //in

如何在
C++
Windows
中测量一行代码的执行时间。我正在插入大约100000条记录
boost::multi_index_container
,如下所示:

while(...) //read a single record from a csv file until EOF
{
    ...
    while(...) // split the record into components based on delimiter
    {
        ...
    }
    //insert into boost::multi_index_container
} 

我需要找到插入所有记录所需的时间,但不包括循环的执行时间。在插入函数之前启动一个
计时器
或任何东西,并在函数调用之后计算经过的时间,结果为0
纳秒
。因此,我无法通过总结单个时间来计算时间。解决方案是什么?

在Windows上,您可以使用获得精确的测量。

在Windows上,您可以使用获得精确的测量。

可能的副本。 有很多方法可以做到这一点。我喜欢的那个用chrono

   #include <iostream>
   #include <chrono>

   using namespace std;
   using namespace std::chrono;



   int main()
  {
    high_resolution_clock::time_point t1 = high_resolution_clock::now();
    //your code here
    high_resolution_clock::time_point t2 = high_resolution_clock::now();

    auto duration = duration_cast<microseconds>( t2 - t1 ).count();

    cout << duration;
    return 0;
  }
#包括
#包括
使用名称空间std;
使用名称空间std::chrono;
int main()
{
高分辨率时钟::时间点t1=高分辨率时钟::现在();
//你的代码在这里
高分辨率时钟::时间点t2=高分辨率时钟::现在();
自动持续时间=持续时间(t2-t1).count();
不能可能的重复。
有很多方法可以做到这一点。我喜欢的一种是使用chrono

   #include <iostream>
   #include <chrono>

   using namespace std;
   using namespace std::chrono;



   int main()
  {
    high_resolution_clock::time_point t1 = high_resolution_clock::now();
    //your code here
    high_resolution_clock::time_point t2 = high_resolution_clock::now();

    auto duration = duration_cast<microseconds>( t2 - t1 ).count();

    cout << duration;
    return 0;
  }
#包括
#包括
使用名称空间std;
使用名称空间std::chrono;
int main()
{
高分辨率时钟::时间点t1=高分辨率时钟::现在();
//你的代码在这里
高分辨率时钟::时间点t2=高分辨率时钟::现在();
自动持续时间=持续时间(t2-t1).count();


原则上,你们可以这样处理:1.测量一个空循环的时间(但确保它并没有被优化掉).2.测量插入循环的时间。3.考虑差异。尽管细节很详细,但如果要测量,应该测量优化的代码,而不是调试代码。然后,优化器可能会让您更难。检查汇编程序输出,确保测量您认为测量的内容。因为您不需要如果文件的读取次数相同,您可能会想出一些额外的步骤和差异,以最终获得所需的内容。我想知道您为什么需要这种方法来测量它?@pradyot:我想要一种Windows解决方案system@BitTickler:我会试试……但我不太确定我是否理解你的意思。@Jackzz。很明显。你为什么需要衡量绩效?在p原则上,你们可以这样处理:1.测量一个空循环的时间(但确保它并没有被优化掉).2.测量插入循环的时间。3.考虑差异。尽管细节很详细,但如果要测量,应该测量优化的代码,而不是调试代码。然后,优化器可能会让您更难。检查汇编程序输出,确保测量您认为测量的内容。因为您不需要如果文件的读取次数相同,您可能会想出一些额外的步骤和差异,以最终获得所需的内容。我想知道您为什么需要这种方法来测量它?@pradyot:我想要一种Windows解决方案system@BitTickler:我会试试……但我不太确定我是否理解你的意思。@Jackzz。很明显。你为什么需要衡量绩效?QPC每次插入的执行时间为0。如我所述,我需要插入10万条记录的总执行时间。您可能需要以某种方式测量细粒度的CPU周期。如上所述,如果要测量的时间太小,请多次测量所需的时间(因此它需要一个可测量的时间量)。然后,神奇的操作是“除法”:
总时间/N
如果N是执行该操作的次数。由于循环和文件访问也会增加总时间,因此需要在没有插入操作的情况下对相同代码进行比较运行。然后
(总时间-总时间\u比较)/N
.QPC为每次插入指定的执行时间为0。正如我所提到的,我需要总执行时间来插入10万条记录。您可能需要以某种方式测量某些细粒度的数据的CPU周期。正如我上面提到的,如果您要测量的数据太小,请多次测量执行该数据所需的时间(因此它需要一个可测量的时间量)。然后,神奇的操作是“除法”:
总时间/N
如果N是执行该操作的次数。由于循环和文件访问也会增加总时间,因此需要在没有插入操作的情况下对相同代码进行比较运行。然后
(总时间-总时间\u比较)/N
。计算的时间以微秒为单位。我已经尝试过了…它不会给出不包含循环的执行时间。在我的计算机上运行良好。你介意我问一下,你到底在做什么吗。你是否尝试过链接中给出的其他方法。计算的时间以微秒为单位。我已经尝试过了…它不会给出执行时间在我的电脑上,离子时间(不包括环路)可以正常工作。你介意我问你,你到底在做什么吗?你尝试过链接中给出的其他方法了吗。