Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #16  
Старый 30.11.2013, 12:31
Аватар для seeman_tm
seeman_tm seeman_tm вне форума
Новичок
 
Регистрация: 03.02.2011
Сообщения: 79
Репутация: -2306
Хорошо

to poli-smen
Ты меня забавляешь, у тебя или со зрением проблема или недостаток внимания. В каком месте ты увидел что идёт сравнение одной и тойже строки а не двух одинаковых ? Или тут такая же история у тебя приключилась как с первым твоим тестом ? То есть посмотрел, но не увидел, не до понял и ляпнул ?
При чём тут мой тест ? Код моего теста на форум не выкладывался. Везде твои исходники, за исключением закомментированных двух нахрен не нужных строк. От чего в первом исходнике была обнаружена разница в показаниях и показана для особо одарённых в картинках. Но ты упёрся во что то своё и пытаешься доказать то ты не тот кем на самом деле являешься.

to angvelem
А по подробней можно ? В смысле, почему показания основанные на GetTickCount не имеют ценность ? Растолкуй, чтоб посетители темы понимали чем плох данный способ.

to NumLock
В данном случае, у меня создаётся поток, который при проведении сравнения ведёт счетчик. А основной поток усыпляется на 5000 миллисекунд, по истечении которого поток приостанавливается и берётся из него значение счётчика.
QueryPerformanceCounter / QueryPerformanceFrequency использую как проверку, сколько всё таки спал основной поток. Результаты показали, что оператор Sleep имеет погрешность до +-5 десятых миллисекунды. То есть, показывает что якобы спал он не 5000, а 4999,5.......5000,5. Но это видать уже зависит от того, когда винда позволит потоку заработать сразу. Поэтому берется средняя из 10 результатов по 5 секунд.
Тоже херовый подход ?

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

Последний раз редактировалось seeman_tm, 30.11.2013 в 12:50.
Ответить с цитированием
  #17  
Старый 30.11.2013, 13:56
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от seeman_tm
to poli-smen
Ты меня забавляешь, у тебя или со зрением проблема или недостаток внимания.
Забавляйся сколько душе угодно, я же тебе не запрещу?
Со зрением у меня никогда проблем не было, хотя вплотную занимаюсь компьютерами ещё с детства.
Когда на работе делаю несколько дел одновременно, внимание конечно снижается - здесь согласен - виноват.
Цитата:
Сообщение от seeman_tm
В каком месте ты увидел что идёт сравнение одной и тойже строки а не двух одинаковых ?
Разве у тебя в Delphi сломался отладчик, что ты не можешь посмотреть, что обе переменные указывают на одну и ту же строку? Или, если ты не умеешь работать с отладчиком, мог бы сделать для проверки хотя бы так:
Код:
1
2
3
4
5
6
7
8
function Test(Str1, Str2: String): Extended;
var
  i: Integer;
  tic1, tic2: DWORD;
begin
  if Pointer(Str1) = Pointer(Str2) then
    raise Exception.Create('Эй! Мне подсунули одну и ту же строку. Нечего халтурить!');
.....
Цитата:
Сообщение от seeman_tm
При чём тут мой тест ? Код моего теста на форум не выкладывался. Везде твои исходники, за исключением закомментированных двух нахрен не нужных строк.
Именно этот тест я и назвал твоим - ты закомментировал в моём тесте UniqueString даже не задумавшись о том зачем они там были нужны.

Хорошо. Вот тебе ещё один тест. Если и он тебя не убедит в твоей неправоте - тогда я пас.
Код:
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
function Test(Str1, Str2: String): Extended;
var
  i: Integer;
  tic1, tic2: DWORD;
begin
  tic1 := GetTickCount;
  for i := 1 to 10000000 do
  begin
    if Str1 = Str2 then;
  end;
  tic2 := GetTickCount;
 
  Result := (tic2 - tic1) / 1000;
end;
 
 
procedure TForm1.Button1Click(Sender: TObject);
const
  alphabet: String = 'qwertyuiopйцукенгшщз'; // Список символов которые будут использованы в строках
var
  s1, s2, s3: String;
  i: Integer;
  c: Char;
begin
  // Будет три больших строки
  SetLength(s1, 10000);
  SetLength(s2, 10000);
  SetLength(s3, 10000);
 
  // Заполняем эти строки случайными символами из списка alphabet
  for i := 1 to Length(s1) do
  begin
    c := alphabet[Random(Length(alphabet)+1)]; // Получаем случайный символ из списка alphabet
    s1[i] := c; // Строки s1 и s2 будем заполнять одним и тем же набором символов
    s2[i] := c; // поэтому эти строки будут одинаковыми
 
    c := alphabet[Random(Length(alphabet)+1)]; // Получаем другой случайный символ из списка alphabet
    s3[i] := c; // А s3 будем заполнять другим набором символов
  end;
 
  // Всё готово для теста
  ShowMessageFmt('Сравнение одной и той же строки заняло %g сек, одинаковых строк заняло %g сек'+
    ' и разных строк заняло %g сек', [Test(s1, s1),  Test(s1, s2), Test(s1, s3)]);
end;
Цитата:
Сообщение от seeman_tm
От чего в первом исходнике была обнаружена разница в показаниях и показана для особо одарённых в картинках. Но ты упёрся во что то своё и пытаешься доказать то ты не тот кем на самом деле являешься.
О каком таком великом разоблачении идёт речь?
В любом случае я устал бить горохом о стену. Если кто-то упёрто считает что одинаковые строки должны сравниваться быстрее различных - это его проблема, а не моя. Согласен?
Ответить с цитированием
  #18  
Старый 30.11.2013, 15:05
Аватар для seeman_tm
seeman_tm seeman_tm вне форума
Новичок
 
Регистрация: 03.02.2011
Сообщения: 79
Репутация: -2306
По умолчанию

Ну с начала о разоблачении.
Хоть ты и думаешь, но из-за невнимательности соображаешь плоховато. В следствие чего, не сразу догоняешь что от тебя требуется или что тебе пытаются втолковать.

Теперь о былом.
О том, что ты мне пытаешься разъяснить, я и так знаю.
Вот тока я так и не дождался внятного ответа, зачем нужны за комментированные мною строки.

Что же. Дам разъяснение сам.

В операциях присваивания настоящего копирования памяти не происходит, а просто копируется указатель и увеличивается счетчик ссылок на 1.
А при изменении переменной уже создается новая уникальная запись со своим счетчиком ссылок.

Если при сравнении у двух переменных, счётчики ссылок и указатели совпадают, то сравнения строк, как таковых, не происходит, а возвращается валидность сравнения.
Что и сказывается на разнице результатов выполнения функции.

Если необходимо создать именно уникальную строку, а не увеличить счетчик ссылок, то для этого и имеется процедура UniqueString.

Терь представь. Сколько ты зря времени потратил на написание процедур и участие в переписке на форуме. А ведь можно было все так элементарно объяснить. Если конечно же понимание этого было, а не понимание того, что так надо.

Последний раз редактировалось seeman_tm, 30.11.2013 в 15:18.
Ответить с цитированием
  #19  
Старый 02.12.2013, 10:01
Аватар для Mrak
Mrak Mrak вне форума
Местный
 
Регистрация: 26.01.2013
Адрес: МО
Сообщения: 438
Версия Delphi: XE2
Репутация: 17
По умолчанию

ТС, давай повежливей, хорошо?

poli-smen уважаемый человек на форуме
а ты кто?
__________________
Я за здоровый экстрим!
Спасибо за "спасибо")
Ответить с цитированием
  #20  
Старый 02.12.2013, 12:24
Аватар для seeman_tm
seeman_tm seeman_tm вне форума
Новичок
 
Регистрация: 03.02.2011
Сообщения: 79
Репутация: -2306
По умолчанию

Да я и не грублю.
А уважаемый poli-smen, не вникнув в то, что было оформлено в постах.
Начал пытаться научить уму разуму. Не вникая в суть того, требуется ли это в данном случае. Где он увидел, что пара строк с наименьшим количеством символов сравниваются быстрее, чем пара строк с наибольшим ? В итоге и с этой ролью не справился.

Фига се. Аж два поста воткнулось одинаковых.

Последний раз редактировалось M.A.D.M.A.N., 02.12.2013 в 18:43.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 02:05.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025