HiResTimer class

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

xenomorph
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 508
Зарегистрирован: 18.04.2004 (Вс) 11:41
Откуда: это не важно - на сегодня у меня есть алиби ...

HiResTimer class

Сообщение xenomorph » 13.04.2009 (Пн) 10:02

День добрый!

Нужен таймер с разрешением выше стандартного, такой как тут:

http://www.windojitsu.com/code/hirestimer.cs.html

Пробовал перевести с Шарпа - не вышло.
Помогите кт чем может!
--
Заранее спасибо!
... Dpkjvfnm dc`xnj itdtkbnmcz, f tckb yt itdtkbnmcz hfcitdtkbnm b dpkjvfnm !!! ...

Williams
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1280
Зарегистрирован: 06.05.2008 (Вт) 18:35
Откуда: System.Reflection.Williams (увидел себя в зеркале :))

Re: HiResTimer class

Сообщение Williams » 13.04.2009 (Пн) 10:15

Если пользуешся этим конвертером, можно попробовать конвертировать код частями, таким образом найти что именно не конвертируется и перевести этот кусок вручную - делал так.

Еще вот что есть у меня:
Код: Выделить всё
Imports System.Runtime.InteropServices

Public Class PerformanceMonitoring
    Friend Structure PerfCounter
        Private NotInheritable Class NativeMethods
            Private Sub New()
            End Sub

            <DllImport("kernel32.dll", SetLastError:=True)> _
            Friend Shared Function QueryPerformanceCounter(ByRef lpPerformanceCount As Long) _
                As <MarshalAs(UnmanagedType.Bool)> Boolean
            End Function

            <DllImport("kernel32.dll", SetLastError:=True)> _
            Friend Shared Function QueryPerformanceFrequency(ByRef frequency As Long) As <MarshalAs(UnmanagedType.Bool)> _
                Boolean
            End Function
        End Class


        Private mStart As Long

        Public Sub Start()
            mStart = 0
            NativeMethods.QueryPerformanceCounter (mStart)
        End Sub

        Public Function Finish() As Double
            Dim mFinish As Long = 0, mFreq As Long = 0
            NativeMethods.QueryPerformanceCounter (mFinish)
            NativeMethods.QueryPerformanceFrequency (mFreq)
            Return ((mFinish - mStart)/mFreq)
        End Function
    End Structure
End Class



И наконец, последний вариант.
Можно поместить код в отдельную C# сборку и подключить ее к VB проекту.
И вы думаете, что вас оставят в живых после прочтения этого поста?

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Re: HiResTimer class

Сообщение Nord777 » 13.04.2009 (Пн) 12:04

Код: Выделить всё
Imports System.Runtime.InteropServices

Namespace Time
   ''' <summary>
   '''Эта структура позволяет подсчитать скорость выполнения кода одним из
   '''наиболее точным способов. Фактически вычисления производятся в тактах процессора.
   ''' </summary>
   Public Structure PerfCounter

#Region "        Declares"
      <DllImport("Kernel32.dll")> _
      Friend Shared Function QueryPerformanceCounter(ByRef performanceCount As Int64) As Boolean
      End Function
      <DllImport("Kernel32.dll")> _
      Friend Shared Function QueryPerformanceFrequency(ByRef frequency As Int64) As Boolean
      End Function

      Public Enum TimeUnit As Integer
         Наносекунды = 1
         Микросекунды = 2
         Милисекунды = 3
         Секунды = 4
         Минуты = 5
         Часы = 6
      End Enum

#End Region

      Private _start As Int64
      Private _finish As Int64
      Private _freq As Int64

      ''' <summary>
      ''' Начинает подсчет вермени выполнения.
      ''' </summary>
      Public Sub Start()
         _start = 0
         QueryPerformanceCounter(_start)
      End Sub

      ''' <summary>
      ''' Завершает подсчет вермени исполнения
      ''' </summary>
      Public Function Finish(ByVal Unit As TimeUnit) As Single
         QueryPerformanceCounter(_finish)
         QueryPerformanceFrequency(_freq)
         Select Case Unit
            Case TimeUnit.Наносекунды : Return Наносекунды
            Case TimeUnit.Микросекунды : Return Микросекунды
            Case TimeUnit.Милисекунды : Return Милисекунды
            Case TimeUnit.Секунды : Return Секунды
            Case TimeUnit.Минуты : Return Минуты
            Case TimeUnit.Часы : Return Часы
         End Select
      End Function

      Public ReadOnly Property Часы() As Integer
         Get
            Return CType(_finish - _start, Single) / CType(_freq, Single) / 360.0!
         End Get
      End Property

      Public ReadOnly Property Минуты() As Integer
         Get
            Return CType(_finish - _start, Single) / CType(_freq, Single) / 60.0!
         End Get
      End Property

      Public ReadOnly Property Секунды() As Integer
         Get
            Return CType(_finish - _start, Single) / CType(_freq, Single)
         End Get
      End Property

      Public ReadOnly Property Милисекунды() As Integer
         Get
            Return CType(_finish - _start, Single) / CType(_freq, Single) * 1000.0!
         End Get
      End Property

      Public ReadOnly Property Микросекунды() As Integer
         Get
            Return CType(_finish - _start, Single) / CType(_freq, Single) * 1000000.0!
         End Get
      End Property

      Public ReadOnly Property Наносекунды() As Integer
         Get
            Return CType(_finish - _start, Single) / CType(_freq, Single) * 1.0E+9!
         End Get
      End Property
   End Structure

End Namespace
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

xenomorph
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 508
Зарегистрирован: 18.04.2004 (Вс) 11:41
Откуда: это не важно - на сегодня у меня есть алиби ...

Re: HiResTimer class

Сообщение xenomorph » 13.04.2009 (Пн) 18:01

Ещё раз спасибо з апомощь!

update 01: я этим меряю скорость ответа MySQL бд. Очень неплохо работает.
Отлавливает разницу кешированого запроса от "свежего".

Прилагаю модулем для быстрого использования.
CodeName: HRT - High Resolution Timer.

Меряет производительность кода с высокой точностью.
Вложения
mod_HRT.rar
HRT собственно. ИМХО Можно в кирпичи.
(974 байт) Скачиваний: 56
... Dpkjvfnm dc`xnj itdtkbnmcz, f tckb yt itdtkbnmcz hfcitdtkbnm b dpkjvfnm !!! ...


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 57

    TopList