|
Программирование >> Автоматически обновляемые приложения
Листинг 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.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |