2

私が書いたコード行がどれほど難しいかをテストしたいと思います。それらを完了するのにかかる時間(またはCPUティック数)を知る必要があります。

Windows CE、コンパクトな.NET Framework 2、VB.NET2005を使用しています

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はGetTickCount、32ビット整数であるDWORDを返します。Integer これは管理対象ではなく管理対象に対応しているLongため、P/Invokeの失敗を説明しています。
  2. DateTime.NowGetSystemTime2。0日間に使用したすべてのCEデバイスで、ミリ秒の解像度を持たないAPIを呼び出すだけです。これで、どのデバイスのOEMでもミリ秒の解像度を得ることができますが、私はそれを見たことがありません(特に、それを望んでいる顧客のために構築したOSで一度見たことがあります)。合理的な回避策はここにあります
  3. Environment.TickCountAPIを呼び出しGetTickCountます。これは通常、プロセッサが起動してからミリ秒を返し、22日程度でラップします。プロセッサティックではありません。それははるかに遅いです。
  4. 一部のデバイスは、より高解像度のカウンターをサポートしています。このカウンターは、P / Invokingによって照会されQueryPerformanceFrequencyQueryPerformanceCounter(明らかに)周波数と現在の値を取得できます。多くの場合、これにはhns(数百ナノ秒)の解像度があります。このレベルのことを心配しているのなら、私はあなたのマネージコードの選択に疑問を抱き始めるかもしれません。とにかく、この例はここにあります
  5. コードのパフォーマンスとCFを調べている場合、この記事は少し古いですが、それでも有効で有益です。

編集

Stopwatchあなたはあなたの質問でクラスについて言及したので:

  1. 古い1.xSDFソースコードのCF1.0およびCF2.0で動作するStopwatchクラスの実装があります。完全な(無料の)1.4ソースをここ(ページの中央下)からダウンロードできます。
于 2011-06-24T15:41:00.010 に答える