Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.68/25: Рейтинг темы: голосов - 25, средняя оценка - 4.68
 Аватар для Xkimos
5 / 5 / 5
Регистрация: 10.04.2014
Сообщений: 51

Как оценить скорость выполнения программы

21.07.2014, 18:36. Показов 5007. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
есть два кода
Кликните здесь для просмотра всего текста
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
{$apptype windows}{$reference 'System.Drawing.dll'}{$reference System.Windows.Forms.dll}
uses System.Windows.Forms,System.Drawing;
var form1:form;
    button1:button;
    textbox1,textbox2:textbox;
    slovo,tolkovanie:string;
procedure tform;
 begin
  form1:=new form;
  form1.text:='TolkFormat';
  form1.width:=340;form1.height:=300;
  form1.left:=500;form1.top:=300;
  form1.MaximizeBox:=false;form1.MinimizeBox:=false;
 end;
function poisk(slovo,adres:string):string;
 var sravnislovo:string;
     simvol:char;
     fail:textfile;
 begin
  assign(fail,adres);
  reset(fail);
  repeat
  sravnislovo:='';
  repeat
   read(fail,simvol);
   if simvol<>'#' then sravnislovo:=sravnislovo+simvol;
  until simvol='#';
  if sravnislovo=slovo then readln(fail,result)
  else 
   begin 
    result:='Слово не найдено.'; 
    readln(fail); 
   end;
  until (eof(fail)) or (sravnislovo=slovo);
  close(fail);
 end; 
procedure gosearh(sender:object;E:system.EventArgs);
var odnabukva:string[1];
    klon:string;
begin 
 klon:=slovo;
 klon:=lowercase(klon);
 odnabukva:=klon;
 if (odnabukva='а') then tolkovanie:=poisk(klon,'dictionary\а.dat') else
 if (odnabukva='б') then tolkovanie:=poisk(klon,'dictionary\б.dat') else
 if (odnabukva='в') then tolkovanie:=poisk(klon,'dictionary\в.dat') else
 if (odnabukva='г') then tolkovanie:=poisk(klon,'dictionary\г.dat') else
 if (odnabukva='д') then tolkovanie:=poisk(klon,'dictionary\д.dat') else
 if (odnabukva='е') then tolkovanie:=poisk(klon,'dictionary\е.dat') else
 if (odnabukva='ё') then tolkovanie:=poisk(klon,'dictionary\ё.dat') else
 if (odnabukva='ж') then tolkovanie:=poisk(klon,'dictionary\ж.dat') else
 if (odnabukva='з') then tolkovanie:=poisk(klon,'dictionary\з.dat') else
 if (odnabukva='и') then tolkovanie:=poisk(klon,'dictionary\и.dat') else
 if (odnabukva='й') then tolkovanie:=poisk(klon,'dictionary\й.dat') else
 if (odnabukva='к') then tolkovanie:=poisk(klon,'dictionary\к.dat') else
 if (odnabukva='л') then tolkovanie:=poisk(klon,'dictionary\л.dat') else
 if (odnabukva='м') then tolkovanie:=poisk(klon,'dictionary\м.dat') else
 if (odnabukva='н') then tolkovanie:=poisk(klon,'dictionary\н.dat') else
 if (odnabukva='о') then tolkovanie:=poisk(klon,'dictionary\о.dat') else
 if (odnabukva='п') then tolkovanie:=poisk(klon,'dictionary\п.dat') else
 if (odnabukva='р') then tolkovanie:=poisk(klon,'dictionary\р.dat') else
 if (odnabukva='с') then tolkovanie:=poisk(klon,'dictionary\с.dat') else
 if (odnabukva='т') then tolkovanie:=poisk(klon,'dictionary\т.dat') else
 if (odnabukva='у') then tolkovanie:=poisk(klon,'dictionary\у.dat') else
 if (odnabukva='ф') then tolkovanie:=poisk(klon,'dictionary\ф.dat') else
 if (odnabukva='х') then tolkovanie:=poisk(klon,'dictionary\х.dat') else
 if (odnabukva='ц') then tolkovanie:=poisk(klon,'dictionary\ц.dat') else
 if (odnabukva='ч') then tolkovanie:=poisk(klon,'dictionary\ч.dat') else
 if (odnabukva='ш') then tolkovanie:=poisk(klon,'dictionary\ш.dat') else
 if (odnabukva='щ') then tolkovanie:=poisk(klon,'dictionary\щ.dat') else
 if (odnabukva='э') then tolkovanie:=poisk(klon,'dictionary\э.dat') else
 if (odnabukva='ю') then tolkovanie:=poisk(klon,'dictionary\ю.dat') else
 if (odnabukva='я') then tolkovanie:=poisk(klon,'dictionary\я.dat') else tolkovanie:='Слово не найдено.'; 
end;
procedure searh;
 begin
  button1:=new button;
  button1.location:=new point(form1.ClientSize.Width-65,6);
  button1.Size:=new System.Drawing.Size(60,20);
  button1.text:='Найти';
  button1.Click +=gosearh;
  form1.controls.add(button1);
 end;
procedure vivod;
 begin
  textbox1:=new textbox;
  textbox1.multiline:=true;
  textbox1.ClientSize:=new System.Drawing.Size(form1.ClientSize.Width-14,form1.ClientSize.Height-40);
  textbox1.location:=new point(6,32);
  textbox1.Enabled:=false;
  form1.Controls.Add(textbox1);
  textbox1.Text:='';
 end;
procedure vvod;
 begin
  textbox1:=new textbox;
  textbox1.multiline:=false;
  textbox1.ClientSize:=new System.Drawing.Size(form1.ClientSize.Width-78,80);
  textbox1.location:=new point(6,6);
  form1.Controls.Add(textbox1);
  textbox1.Text:='';
 end;
begin
 tform;searh;vvod;vivod;
 application.run(form1);
 slovo:=textbox1.Text;
 textbox2.Text:=tolkovanie;
end.

(автор я) и
Кликните здесь для просмотра всего текста
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
{$apptype windows}
{$reference 'System.Drawing.dll'}{$reference System.Windows.Forms.dll}
uses
  System.Windows.Forms, System.Drawing;
type
  TLetter = set of Char;
var
  form1: form;
  button1: button;
  textbox1, textbox2: textbox;
  slovo, tolkovanie: string;
  Letter : TLetter := ['а'..'я']; 
 
procedure tform;
begin
  form1 := new form;
  form1.text := 'TolkFormat';
  form1.width := 340;form1.height := 300;
  form1.left := 500;form1.top := 300;
  form1.MaximizeBox := false;form1.MinimizeBox := false;
end;
 
function poisk(slovo, adres: string): string;
var
  sravnislovo: string;
  simvol: char;
  fail: textfile;
begin
  assign(fail, adres);
  reset(fail);
  repeat
    sravnislovo := '';
    repeat
      read(fail, simvol);
      if simvol <> '#' then sravnislovo := sravnislovo + simvol;
    until simvol = '#';
    if sravnislovo = slovo then readln(fail, result)
    else 
    begin
      result := 'Слово не найдено.'; 
      readln(fail); 
    end;
  until (eof(fail)) or (sravnislovo = slovo);
  close(fail);
end;
 
procedure gosearh(sender: object; E: system.EventArgs);
var
  odnabukva: Char;  //string[1];
  klon: string;
begin
  
  slovo := textbox1.Text; // <--- Первая строка
  
  klon := slovo;
  klon := lowercase(klon);
  odnabukva := klon[1];
  if odnabukva in Letter then  tolkovanie:=poisk(klon,'dictionary\'+odnabukva+'.dat')
  else tolkovanie := 'Слово не найдено.';  
 
 textbox2.Text := tolkovanie; // <--- Вторая строка
end;
 
procedure searh;
begin
  button1 := new button;
  button1.location := new point(form1.ClientSize.Width - 65, 6);
  button1.Size := new System.Drawing.Size(60, 20);
  button1.text := 'Найти';
  button1.Click += gosearh;
  form1.controls.add(button1);
end;
 
procedure vivod;
begin
  textbox2 := new textbox;
  textbox2.multiline := true;
  textbox2.ClientSize := new System.Drawing.Size(form1.ClientSize.Width - 14, form1.ClientSize.Height - 40);
  textbox2.location := new point(6, 32);
  textbox2.Enabled := false;
  form1.Controls.Add(textbox2);
  textbox2.Text := '';
end;
 
procedure vvod;
begin
  textbox1 := new textbox;
  textbox1.multiline := false;
  textbox1.ClientSize := new System.Drawing.Size(form1.ClientSize.Width - 78, 80);
  textbox1.location := new point(6, 6);
  form1.Controls.Add(textbox1);
  textbox1.Text := '';
end;
 
begin
  tform;searh;vvod;vivod;
  application.run(form1);
end.

(автор Dmitrinik)
При том exe второго кода весит на 20% больше первого. Здесь разница не заметна.
Но всё же подскажите способ проверить эффективность кода
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.07.2014, 18:36
Ответы с готовыми решениями:

Как закрыть граф. модуль во время выполнения программы
Как закрыть граф. модуль во время выполнения программы? Я написал большой код, но забыл сохранить его и нажал запустить. Код содержит ...

Замерить скорость выполнения алгоритма
Как в Pascal ABC измерить скорость выполнения всего кода либо отдельного участка?

Оценить скорость (время) выполнения метода
Нельзя ли никак сию задачу решить? То есть к примеру, написал я метод, показался он мне не оптимальным - заменил его на другой. И как бы...

6
 Аватар для APALoff
1648 / 1077 / 1081
Регистрация: 03.07.2013
Сообщений: 4,507
21.07.2014, 19:36
Мне кажется не всегда минимальное время говорит об эффективности.
Например есть быстрая программа но с очень большим потреблением оперативной памяти, а есть программа чуть медленнее (или много медленней), но с минимальным использованием оперативки. Вопрос: Какая программа более эффективная?

А по времени... средствами .NET не готов показать, но в TP делалось считывание текущего времени из системы (GetTime) в начале кода и считывалось при выходе - разница и есть время работы.

Добавлено через 2 минуты
Если не ошибаюсь в .NET есть уже встроенный счетчик который запускается при старте программы.

Добавлено через 1 минуту
Вот нашел:
Модуль Timers
Модуль Timers содержит класс Timer, позволяющий выполнять определенные действия через равные промежутки времени. В конструкторе класса Timer указывается промежуток времени и имя процедуры без параметров - обработчика события таймера, вызываемой через указанный промежуток времени.
Класс Timer имеет следующий интерфейс:

type
Timer = class
constructor (ms: integer; TimerProc: procedure);
procedure Start;
procedure Stop;
property Enabled: boolean read write;
property Interval: integer read write;
end;

Члены класса Timer описаны в следующей таблице:

constructor (ms: integer; TimerProc: procedure);
Создает таймер, выполняющий каждые ms миллисекунд действие, содержащееся в процедуре без параметров TimerProc, называемой обработчиком таймера. Созданный таймер необходимо запустить, вызвав метод Start
procedure Start;
Запускает таймер
procedure Stop;
Останавливаетает таймер
property Enabled: boolean read write;
Запущен ли таймер
property Interval: integer read write;
Промежуток времени между вызовами обработчика таймера
Добавлено через 1 минуту
Кстати, во встроенной справке это находится по ключевому слову Time
Учитесь пользоваться встроенной справкой, к тому же там и пример есть.

Добавлено через 1 минуту
Вот то что нужно:
function Milliseconds: integer;
Возвращает количество миллисекунд с момента начала работы программы
0
 Аватар для Xkimos
5 / 5 / 5
Регистрация: 10.04.2014
Сообщений: 51
21.07.2014, 19:51  [ТС]
APALoff, про Timers знал, но не думал что его можно так использовать, а вот с Milliseconds не соглашусь там нужно самому ввести слово, а только потом начнётся поиск в файлах
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33195 / 21491 / 8233
Регистрация: 22.10.2011
Сообщений: 36,878
Записей в блоге: 12
21.07.2014, 20:28
Xkimos, какое отношение размер EXE-шника имеет к скорости выполнения? Скажем, если записать функцию poisk вот так:
Pascal
1
2
3
4
5
6
7
function poisk(slovo, adres: string): string;
begin
  result := 'Слово не найдено.'; 
  var s := &File.ReadAllLines(adres);
  foreach st : string in s do
    if st.StartsWith(slovo+'#') then result := st.Split('#')[1];
end;
, то размер EXE станет точно таким же, как и в первом коде. Но это ничего не значит...
0
 Аватар для Xkimos
5 / 5 / 5
Регистрация: 10.04.2014
Сообщений: 51
21.07.2014, 20:46  [ТС]
UI, вы не совсем правильно меня поняли я не связывал размер exe со скоростью, а просто хотел узнать разницу в скорости выполнения этих кодов и посмотреть стоит ли увлечение скорости (если таковое будит) тех 20%.
И если вам не сложно объясните пожалуйста как оно так получилось всего 4 строчки очень уж интересно
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33195 / 21491 / 8233
Регистрация: 22.10.2011
Сообщений: 36,878
Записей в блоге: 12
21.07.2014, 23:29
Цитата Сообщение от Xkimos Посмотреть сообщение
как оно так получилось всего 4 строчки
Это всё .NET-овские фишки:
Pascal
1
2
3
4
5
6
7
8
9
10
11
function poisk(slovo, adres: string): string;
begin
  result := 'Слово не найдено.'; // сразу назначаем результат, если ничего не будет найдено
  var s := &File.ReadAllLines(adres); // читаем все строки из файла в переменную s (это будет array of string)
  foreach st : string in s do // перебираем все строки в полученном массиве, и для каждой из них...
 
    // проверяем, если текущая строка начинается с искомого слова, за которым следует #, 
    // то получаем часть строки после "решетки" (разбиваем строку по этому символу, по 
    // нулевому индексу будет находиться само слово, по первому индексу - его толкование)
    if st.StartsWith(slovo+'#') then result := st.Split('#')[1];
end;
В принципе, можно было бы еще и вот так записать четвертую строку:
Pascal
1
if st.StartsWith(slovo+'#') then begin result := st.Split('#')[1]; Break end;
это увеличит быстродействие, чем ближе искомое слово будет находиться к началу файла, тем быстрее закончится цикл
0
 Аватар для Xkimos
5 / 5 / 5
Регистрация: 10.04.2014
Сообщений: 51
22.07.2014, 05:32  [ТС]
UI, Век живи век учись
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.07.2014, 05:32
Помогаю со студенческими работами здесь

Как увеличить скорость выполнения программы?
Вот программа: В малых цифрах еще быстро выполняется, а вот когда заходит до 1 000 0000 то уже очень долго. Как ускорить скорость...

Как узнать скорость выполнения программы?
Должна же быть какая то функция или метод, чтобы узнать время выполнения программы, или возможно есть инструменты в MVS2010 для анализа...

Как увеличить скорость выполнения программы?
Народ, ну вот наверное все знают, что выражение A=B*B будет выполняться в сто раз быстрее чем выражение A=B**2.0. А где вообще почитать...

Скорость выполнения программы
Как ускорить ход выполнение программы ? for a in range(1,1000+1): for b in range(1,1000+1): for c in range(1,1000+1): ...

Скорость выполнения программы
Здравствуйте! У меня такой вопрос: у меня есть программа, которая запускает некий метод по таймеру. Подскажите скорость выполнения...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение/ Перевод Сайт называется reddit: The Thinkpad X220 Tablet is the best budget school laptop period. Это. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru