Windows CE, .NET - как получить тики процессора или текущее время в (микро) миллисекундах? - PullRequest
2 голосов
/ 24 июня 2011

Я хотел бы проверить, насколько сложны строки кода, которые я написал. Мне нужно знать, сколько времени (или сколько тиков процессора) требуется для их выполнения.

Я использую Windows CE, компактный .NET Framework 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

... и многое другое. Ничего не работает .

Можете ли вы помочь, пожалуйста?

1 Ответ

2 голосов
/ 24 июня 2011
  1. API GetTickCount возвращает DWORD, который является 32-разрядным целым числом.Это соответствует управляемому Integer , а не a Long, что объясняет ошибку P / Invoke.
  2. DateTime.Now просто вызывает API GetSystemTime, который в каждом устройстве CEЯ использовал с тех пор в 2,0 дня, не было разрешения в миллисекундах.Теперь OEM-производитель любого устройства может дать разрешение в мс, но я никогда не видел его (ну, я видел это однажды в ОС, которую я создал для клиента, который специально этого хотел).Разумный обходной путь можно найти здесь .
  3. Environment.TickCount вызывает API GetTickCount, который обычно возвращает миллисекунды с момента запуска процессора, с переносом примерно на 22 дня.Это не тактов процессора.Это намного медленнее.
  4. Некоторые устройства поддерживают счетчик с более высоким разрешением, который можно запросить с помощью P / Invoking QueryPerformanceFrequency и QueryPerformanceCounter, чтобы получить (очевидно) частоту и текущее значение.Это часто имеет разрешение hns (сотни наносекунд).Хотя, если вы беспокоитесь о вещах на этом уровне, я могу начать сомневаться в вашем выборе управляемого кода.В любом случае, пример для этого можно найти здесь .
  5. Если вы смотрите на производительность кода и CF, то эта статья , хотя и немного устаревшая, по-прежнему действителен и информативен.

РЕДАКТИРОВАТЬ

Поскольку вы упомянули класс Stopwatch в своем вопросе:

  1. Существует реализация класса Stopwatch, которая работает с CF 1.0 и CF 2.0 в старом исходном коде 1.x SDF.Вы можете скачать полный (бесплатный) источник 1.4 здесь (нижняя середина страницы).
...