2

我想测试我写的代码行有多难。我需要知道完成它们需要多长时间(或多少 CPU 滴答声)。

我使用 Windows CE、紧凑的 .NET 框架 2、VB.NET 2005

在 Google 和这里​​,我发现只有适用于桌面 Windows 的解决方案,而不是移动设备。我试过以下:

Private Declare Function GetTickCount Lib "kernel32" () As Long
'and
Private Declare Function GetTickCount Lib "coredll.lib" () As Long
Dim lngStart As Long = GetTickCount() 'did not work

System.Diagnostics.Stopwatch ' does not exist

System.DateTime.Now() ' resolution only seconds I need at least milliseconds

System.Environment.TickCount ' same as Now()

(DateTime.Now-new DateTime(1970,1,1)).TotalMilliseconds ' only seconds

... 以及更多。没有任何效果

你能帮忙吗?

4

1 回答 1

2
  1. API 返回一个 DWORD ,GetTickCount它是一个 32 位整数。这对应于托管Integer 而不是Long这解释了 P/Invoke 失败。
  2. DateTime.Now只是调用GetSystemTimeAPI,在我从 2.0 天开始使用的每个 CE 设备中,都没有毫秒分辨率。现在,任何设备的 OEM 都可以为其提供 ms 分辨率,但我从未见过它(好吧,我曾经在我为特别想要它的客户构建的操作系统中看到它)。可以在此处找到合理的解决方法。
  3. Environment.TickCount调用GetTickCountAPI,它通常返回自处理器启动以来的毫秒数,并在 22 天左右返回。它不是处理器滴答声。它要慢得多。
  4. 一些设备支持更高分辨率的计数器,可以通过 P/Invoking 查询QueryPerformanceFrequencyQueryPerformanceCounter获取(显然)频率和当前值。这通常具有 hns(数百纳秒)分辨率。尽管如果您担心这一级别的事情,我可能会开始质疑您对托管代码的选择。无论如何,可以在这里找到一个例子。
  5. 如果您正在查看代码性能和 CF,那么这篇文章虽然有点旧,但仍然有效且内容丰富。

编辑

既然您Stopwatch在问题中提到了课程:

  1. 在旧的 1.x SDF 源代码中有一个可以与 CF 1.0 和 CF 2.0 一起使用的 Stopwatch 类的实现。您可以在此处(页面底部中间)下载完整的(免费)1.4 源代码。
于 2011-06-24T15:41:00.010 回答