Vinechka помоги переписать структуру с C# на VB.NET.

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

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

Thomas
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 246
Зарегистрирован: 12.11.2005 (Сб) 0:17
Откуда: "Сказочное королевство"

Vinechka помоги переписать структуру с C# на VB.NET.

Сообщение Thomas » 01.02.2006 (Ср) 10:22

Vinechka

Мне Gaidar подсказал как решить проблему в С#.
Я же сейчас переписал все из C# на VB, кроме этой подсказки.
Может поможешь.

VladD2 написал тут как-то класс:

using System;
using System.Runtime.InteropServices;

Код:

Код: Выделить всё
namespace Utils
{
    /// <summary>
    /// Эта структура позволяет подсчитать скорость выполнения кода одним из
    /// наиболее точным способов. Фактически вычисления производятся в тактах
    /// процессора, а потом переводятся в милисекунд (десятичная часть
    /// является долями секунды).
    /// </summary>
    public struct PerfCounter
    {
        Int64 _start;

        /// <summary>
        /// Начинает подсчет вермени выполнения.
        /// </summary>
        public void Start()
        {
            _start = 0;
            QueryPerformanceCounter(ref _start);
        }

        /// <summary>
        /// Завершает полсчет вермени исполнения и возвращает время в секундах.
        /// </summary>
        /// <returns>Время в секундах потраченое на выполнение участка
        /// кода. Десятичная часть отражает доли секунды.</returns>
        public float Finish()
        {
            Int64 finish = 0;
            QueryPerformanceCounter(ref finish);

            Int64 freq = 0;
            QueryPerformanceFrequency(ref freq);
            return (((float)(finish - _start) /(float)freq));
        }

        [DllImport("Kernel32.dll")]
        static extern bool QueryPerformanceCounter(ref Int64 performanceCount);

        [DllImport("Kernel32.dll")]
        static extern bool QueryPerformanceFrequency(ref Int64 frequency);
    }
}


Использовать его нужно так:

Код:
// Где нибудь объявляем переменную...
PerfCounter timer = new PerfCounter();

timer.Start(); // Начало замера

// тестируемый код...

// Выводим результат в консоль.
Console.WriteLine("Время выполнения в секундах: {0:### ### ##0.0000}", timer.Finish());
// Одну переменную можно использовать многократно.

Нужно переписать структуру на VB или придумать как ее использовать в проекте VB в своем виде.
Заранее спасибо.

Vinechka
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 381
Зарегистрирован: 10.05.2005 (Вт) 4:07
Откуда: Москва

Сообщение Vinechka » 01.02.2006 (Ср) 11:39

Вот, перевел класс на вб. Возвращает то что должна ;)
Код: Выделить всё
Public Class PerfCounter

    Private _start As Int64
    Private Declare Function QueryPerformanceCounter Lib "Kernel32" _
    Alias "QueryPerformanceCounter" (ByRef performanceCount As Int64) As Boolean
    Private Declare Function QueryPerformanceFrequency Lib "Kernel32" _
    Alias "QueryPerformanceFrequency" (ByRef frequency As Int64) As Boolean

    Public Sub Start()
        _start = 0
        QueryPerformanceCounter(_start)
    End Sub

    Public Function Finish() As Double
        Dim lFinish As Int64 = 0
        QueryPerformanceCounter(lFinish)
        Dim freq As Int64 = 0
        QueryPerformanceFrequency(freq)
        Return (CDbl(lFinish) - CDbl(_start)) / CDbl(freq)
    End Function

End Class

Thomas
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 246
Зарегистрирован: 12.11.2005 (Сб) 0:17
Откуда: "Сказочное королевство"

Сообщение Thomas » 01.02.2006 (Ср) 16:25

Vinechka
Привет.
Класс. Оперативно. Все работает.
Вечером буду сидеть и вдумчиво сравнивать код VB и C#. Нельзя упускать такую возможность подучиться.
Большой, большой спасиб. :wink:

Удачи во всем.


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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 46

    TopList