Как обнулить значение переменной date1 типа DateTime?

Язык C#: программирование на C#, портирование кода C# на VB и VB на C#.

Модератор: Ramzes

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

Как обнулить значение переменной date1 типа DateTime?

Сообщение Thomas » 31.01.2006 (Вт) 0:13

Приветствую всех.
Хочу вычислить продолжительность выполнения функции.
Использую (пока) две переменные date1 и date2 типа DateTime.
Первую определяю перед стартом выполнения функции, вторую после окончания. Для нового замера переменные нужно очистить от значений.
Вопрос: как?

date1 = System.DateTime.Now; // присвоил переменной значение текущего момента
sort1.shellsort(Tabel_2); // запустил функцию которую проверяю
date2 = System.DateTime.Now; // присвоил второй переменной значение момента окончания выполнения функции
System.TimeSpan diff0 = date2.Subtract(date1); // получил разницу в миллисекундах.
lblTijdBubblesort.Text=diff0.Milliseconds.ToString(); // отобразил значение интервала на lebel

А вообще может существует более культурный способ?

Первоначально думал таймер использовать как секундомер. Думаю помещу таймер на форму, перед началом выполнения функции запущу, после окончания выполнения функции остановлю и получу циферку в миллисекундах. Ан нет, так таймер не работает.
Задаш интервал таймеру, старт, а вот после истечения интервала стоп. Так работает.

Прошу помогите ученику.
Заранее спасибо.

gaidar
System Debugger
System Debugger
 
Сообщения: 3152
Зарегистрирован: 23.12.2001 (Вс) 13:22

Сообщение gaidar » 31.01.2006 (Вт) 17:46

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());
// Одну переменную можно использовать многократно.
The difficult I’ll do right now. The impossible will take a little while. (c) US engineers in WWII
I don't always know what I'm talking about, but I know I'm right. (c) Muhammad Ali

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

Сообщение Thomas » 31.01.2006 (Вт) 17:52

gaidar
Спасибо.
Вечером попробую.
Доложу что получилось.

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

Сообщение Thomas » 31.01.2006 (Вт) 22:28

gaidar
Спасибо еще раз.
Мне это нужно было чтобы сравнивать скорость выполнения сортировки массива чисел различными способами. (bubbblesort, shellsort, quicksort)

Вставил эту струкуру в код формы и далее как подсказали. Все сработало.

Может выложить все это дело в базу знаний.(проект) Новичкам вроде меня точно пригодиться.

Сейчас я этот проект переписываю на VB.NET. Код формы и класс с методами сортировки готовы. Подчищаю огрехи.
Подскажи как мне переписать эту структуру на VB, а потом вставить в прект.


Вернуться в C#

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

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

    TopList