在 C++/CLI 中计算时间

Counting time in C++/CLI

我有一个应用程序,我必须计算执行部分 C++ 函数和 ASM 函数的时间。实际上我有问题,我得到的时间很奇怪 - 0 或大约 15600。O 更频繁地发生。有时,执行后,时间看起来不错,但值不同于 0 和 ~15600。任何人都知道为什么会发生?以及如何解决它? 计算我的 C++ 应用程序执行时间的片段:

auto start = chrono::system_clock::now();
for (int i = 0; i < nThreads; i++)
    xThread[i]->Start(i);
for (int i = 0; i < nThreads; i++)
    xThread[i]->Join();
auto elapsed = chrono::system_clock::now() - start;
long long milliseconds = chrono::duration_cast<std::chrono::microseconds>(elapsed).count();
cppTimer = milliseconds;

我觉得不错。除了强制转换为 std::chrono::microseconds 并将其命名为 milliseconds.

我用了好几个月的片段是:

class benchmark {

private:
    typedef std::chrono::high_resolution_clock clock;
    typedef std::chrono::milliseconds milliseconds;

    clock::time_point start;

public:
    benchmark(bool startCounting = true) {
        if(startCounting)
            start = clock::now();
    }

    void reset() {
        start = clock::now();
    }

    // in milliseconds
    double elapsed() {
        milliseconds ms = std::chrono::duration_cast<milliseconds>(clock::now() - start);
        double elapsed_secs = ms.count() / 1000.0;
        return elapsed_secs;
    }
};



// usage
benchmark b;
...
cout << "took " << b.elapsed() << " ms" << endl;

您所看到的是计时器的分辨率。显然,chrono::system_clock 在您的系统上每 1/64 秒或 15,625 微秒滴答一次。

由于您使用的是 C++/CLI 并且有可用的 .Net 库,我会改用 Stopwatch class。它通常具有比 1/64 秒高得多的分辨率。