0

使用 Visual c++2010 express 和 WinXP 运行以下代码时,“for 循环”始终按如下方式执行:

31ms读取25000行,62ms读取25000行,46ms读取25000行,62ms读取25000行,46ms读取25000行,46ms读取25000行

但是,当我在 Windows 7 Home Edition 上使用 Visual c++2010 express 进行编译时,for 循环执行如下:

62ms读取25000行,530ms读取25000行,514ms读取25000行,514ms读取25000行,514ms读取25000行,530ms读取25000行

我试图弄清楚为什么“for loop”第一次在 Windows 7 上运行 t 毫秒,但随后跳到 10 xt 毫秒以进行后续运行。而在 XP 上,它始终运行 t 毫秒。它可能是 Windows 7 构建/设置所特有的东西,也可能是代码中的基本内容。

我最近开始编写 C++ 编程,非常感谢帮助我了解 Windows 7 环境中发生的情况。

#include <iostream>
#include <string>
#include <vector>
#include "Elapsed.h"

using namespace std;

void readfile(){
    Elapsed time1;
    vector<string> lines;
    lines.reserve(50000);
    string s = "this is a string this is a longer string ";
    for(int i = 0; i<25000; i++) lines.push_back(s);
    cout<<"Read "<<lines.size()<<" lines in "<<time1().total_milliseconds()<<"ms\n";
}

int main(){
    readfile();
    readfile();
    readfile();
    readfile();
    readfile();
    readfile();
    system("PAUSE");
}

#include <boost/date_time.hpp> 
// Purpose: track elapsed time from constructor or reset
class Elapsed {
    boost::posix_time::ptime m_when;
public:
    static boost::posix_time::ptime now(){return boost::posix_time::microsec_clock::universal_time();}
    Elapsed(): m_when( now() )
    {
    } // end constructor

    void reset() { m_when = now(); }

    boost::posix_time::time_duration operator()() const {
        return now() - m_when;
    } //end operator()
};// end class
4

1 回答 1

1

你应该这样计算你的时间:

boost::posix_time::time_duration span = time1();
cout << "Read " << lines.size() << " lines in "<< 
     span.total_milliseconds() << "ms\n";

注意operator<<不包含序列点,所以你可能会在定时器中包含一些输出到的cout,而 IO 时序可能是相当不可预测的。

于 2013-03-08T20:00:54.933 回答