![]()  | 
	
 
  | 
		
			
  | 	
	
	
		
		|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны | 
![]()  | 
	
	
| 
		 | 
	Опции темы | Поиск в этой теме | Опции просмотра | 
| 
		 
			 
			#16  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 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  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Цитата: 
	
 Со зрением у меня никогда проблем не было, хотя вплотную занимаюсь компьютерами ещё с детства. Когда на работе делаю несколько дел одновременно, внимание конечно снижается - здесь согласен - виноват. Цитата: 
	
 Код: 
	function Test(Str1, Str2: String): Extended;
var
  i: Integer;
  tic1, tic2: DWORD;
begin
  if Pointer(Str1) = Pointer(Str2) then
    raise Exception.Create('Эй! Мне подсунули одну и ту же строку. Нечего халтурить!');
.....Цитата: 
	
 Хорошо. Вот тебе ещё один тест. Если и он тебя не убедит в твоей неправоте - тогда я пас. Код: 
	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;Цитата: 
	
 В любом случае я устал бить горохом о стену. Если кто-то упёрто считает что одинаковые строки должны сравниваться быстрее различных - это его проблема, а не моя. Согласен?  | 
| 
		 
			 
			#18  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Ну с начала о разоблачении. 
		
	
		
		
		
		
		
		
			Хоть ты и думаешь, но из-за невнимательности соображаешь плоховато. В следствие чего, не сразу догоняешь что от тебя требуется или что тебе пытаются втолковать. Теперь о былом. О том, что ты мне пытаешься разъяснить, я и так знаю. Вот тока я так и не дождался внятного ответа, зачем нужны за комментированные мною строки. Что же. Дам разъяснение сам. В операциях присваивания настоящего копирования памяти не происходит, а просто копируется указатель и увеличивается счетчик ссылок на 1. А при изменении переменной уже создается новая уникальная запись со своим счетчиком ссылок. Если при сравнении у двух переменных, счётчики ссылок и указатели совпадают, то сравнения строк, как таковых, не происходит, а возвращается валидность сравнения. Что и сказывается на разнице результатов выполнения функции. Если необходимо создать именно уникальную строку, а не увеличить счетчик ссылок, то для этого и имеется процедура UniqueString. Терь представь. Сколько ты зря времени потратил на написание процедур и участие в переписке на форуме. А ведь можно было все так элементарно объяснить. Если конечно же понимание этого было, а не понимание того, что так надо. Последний раз редактировалось seeman_tm, 30.11.2013 в 15:18.  | 
| 
		 
			 
			#19  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 ТС, давай повежливей, хорошо? 
		
	
		
		
		
		
			
		
		
		
		
	
		
		
	
	
	poli-smen уважаемый человек на форуме а ты кто?  | 
| 
		 
			 
			#20  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Да я и не грублю. 
		
	
		
		
		
		
		
		
			А уважаемый poli-smen, не вникнув в то, что было оформлено в постах. Начал пытаться научить уму разуму. Не вникая в суть того, требуется ли это в данном случае. Где он увидел, что пара строк с наименьшим количеством символов сравниваются быстрее, чем пара строк с наибольшим ? В итоге и с этой ролью не справился. Фига се. Аж два поста воткнулось одинаковых. Последний раз редактировалось M.A.D.M.A.N., 02.12.2013 в 18:43.  |