Программирование >>  Автоматически обновляемые приложения 

1 ... 101 102 103 [ 104 ] 105 106 107 ... 170


Листинг 9.40. Создание собственной записи в журнале событий

Создаем источник, если он еще не существует

if (!(EventLog.SourceExists( MySour , System.Environment.MachineName) {

EventSourceCreationData mySourceData =

new EventSourceCreationData( MySour , myLog ); EventLog.CreateEventSource(mySourceData); MessageBox.Show( GreatingEventSource ) ;

Удаление собственного журнала событий

Для удаления журнала событий используется метод Delete класса EventLog

(листинг 9.41). При удалении собственного журнала событий удостоверьтесь, что другие источники не делают записей в этом журнале.

I Листинг 9.41. Удаление собственной записи из журнала событий

string logName = MyLog ;

if (EventLog. SourceExists ( MyOldSource , System. Environment .MachineName) ) {

logName = EventLog. LogNameFromSourceName ( MySour ,

System.Environment .MachineName) ; EventLog. DeleteEventSource ( MySour , System. Environment. MachineName) ; EventLog. Delete (logName, System.Environment .MachineName) ; MessageBox.Show(logName + удален. );

Примечание

Примеры работы с журналами событий находятся в папке EventLogDemo на прилагаемом диске.

Измерение времени выполнения кода в приложении

Чтобы оценить скорость работы какого-нибудь кода в приложении, нужно иметь определенную методику. Самый простой способ- это использовать



Измерение с помощью функций Windows API

На сайте MSDN имеется статья, в которой говорится, как измерять выполнение кода с очень высокой точностью (адрес статьи http: support.inicrosoft.coin/kb/306979). В листинге 9.42 приведен код из этой статьи, показывающий, как это делать.

I, Листинг 9.42. Измерение с помощью функций Windows API

[Dlllmport( kernel32. dll )]

extern static short QueryPerformanceCounter(ref long IpPerformanceCount); [Dlllmport( kernel32.dll )]

extern static short QueryPerformanceFrequency(ref long IpFrequency);

private void FormlLoad(object sender, EventArgs e) {

long Ctrl = 0, ctr2 = 0, freq = 0; int acc =0, i = 0;

if (QueryPerformanceCounter(ref Ctrl) != 0) Начинаем отчет времени {

for (i = 0; i < 1000; i++) acc++; вьшолняем действия QueryPerformanceCounter(ref ctr2); заканчиваем отчет времени. Ibllnfo.Text = Начало: + Ctrl + Environment.NewLine; Ibllnfo.Text = Ibllnfo.Text + Конец: +

ctr2 + Environment.NewLine; QueryPerformanceFrequency(ref freq); Ibllnfo.Text = Ibllnfo.Text +

Минимальное разрешение QueryPerformanceCounter: 1/ +

freq + сек. + Environment.NewLine; Ibllnfo.Text = Ibllnfo.Text +

Время инкрементирования до 1000: +

(ctr2 - Ctrl) * 1.0 / freq + сек. ;

else

Ibllnfo.Text = Счетчик высокой точности не поддерживается. ;

методы TickCount из класса Environment ИЛИ Ticks ИЗ КЛасса DateTime. Но эти способы не блещут точностью. Рассмотрим все варианты.



Листинг 9.43. Измерение с помощью метода Ticks

Начало измерения

long startTicks = DateTime.Now.Ticks; Операция, которую нужно замерить ... ваш код

long endTicks = DateTime.Now.Ticks; завершение измерения long delta = endTicks - startTicks;

MessageBox.Show( Ticks = + delta.ToString()); Конвертируем в секунды

delta = delta/(long)10000000; один такт равен 100 наносекундам

MessageBox.Show( Операция длилась: + delta.ToString());

Данный способ обеспечивает точность до 100 наносекунд.

Измерение с помощью TicliCount

Наименьшую точность обеспечивает пример с использованием свойства TickCount, который приведен в листинге 9.44.

Листинг 9.44. Измерение с помощью TickCount

Начало измерения

int startOp = Environment.TickCount; Операция, которую нужно замерить ... ваш код

Данный код обеспечивает точность до 1/3579545 секунды.

Примечание

Пример находится в папке QueryPerformanceDemo на прилагаемом диске.

Измерение с помощью метода Ticks

Другой способ (листинг 9.43), который обеспечивает среднюю точность, предполагает использование свойства Ticks класса DateTime.



1 ... 101 102 103 [ 104 ] 105 106 107 ... 170

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика