Здравствуйте, WolfHound, Вы писали:
WH>Здравствуйте, Pavel Dvorkin, Вы писали:
WH>ЗЫ Замеры производились 100 раз. Самые быстрые и самые медленные результаты отбрасывались, остальные усреднялись. WH>ЗЗЫ VS 2003
Вот мои результаты. Количество итераций цикла увеличил в 100 раз — не люблю я слишком малые значения
Ай-яй-яй!!! Как же это я так оплошал . Говорил, что , мол, нет времени на длину строки, проход мол, а ведь strcat — тоже проход, а оказывается, это быстрее, чем мой однопроходной код! Вот и делай после этого заявления про оптимизацию
Ничего, реабилитируемся. Просто уж строки слишком короткие.Заменим их на
Не так уж много, верно, процентов 10-15. Только вот здесь всего 2 строки конкатенируются, а у меня их было обычно 5-10. При concat второй строки проходится первая (поиск конца строки в szTotal) , при concat третьей — первая со второй, и т.д. В общем, двойной цикл
S>Решил помочь с примером: S> Есть в физике понятие материальная точка — это точка, размерами которой можно пренебречь, соответсвенно есть просто точка — её размерами пренебрегать не стоит.
S>Соответсвенно, в Вашем коде, если я правильно понял спринтф — материальная точка .
Вообще-то, насколько я помню, у просто точки размеров нет вообще. Если ты имел в виду тело — тогда да.
Здравствуйте, Pavel Dvorkin, Вы писали:
PD>Здравствуйте, srggal, Вы писали:
S>>Решил помочь с примером: S>> Есть в физике понятие материальная точка — это тело, размерами которого можно пренебречь, соответсвенно есть просто точка — её размерами пренебрегать не стоит.
PD>Вообще-то, насколько я помню, у просто точки размеров нет вообще. Если ты имел в виду тело — тогда да.
Здравствуйте, srggal, Вы писали:
S>Здравствуйте, Pavel Dvorkin, Вы писали:
S>Хоть Вы и читтер уважаемый, ан все равно приятно увидеть Думмера, ( поглаживая свой БФЖ ), и вспоминать как БФЖ рулит на 7мом уровне в дедматч. Эххх.
Ради бога, переведи на русский, а то я даже не знаю, как на все это реагировать .
Здравствуйте, Pavel Dvorkin, Вы писали:
PD>Ай-яй-яй!!! Как же это я так оплошал . Говорил, что , мол, нет времени на длину строки, проход мол, а ведь strcat — тоже проход, а оказывается, это быстрее, чем мой однопроходной код! Вот и делай после этого заявления про оптимизацию
PD>Не так уж много, верно, процентов 10-15. Только вот здесь всего 2 строки конкатенируются, а у меня их было обычно 5-10.
ну раз уж пошла такая пьянка — сделаем условия более близкими к твоей задаче, как ты ее описываешь
то есть, вариант с strcat медленнее более чем в два раза
и здесь еще только четыре строки — при росте количества строк и их длины разрыв увеличится еще больше
поздравляю вас, товарищ, с выдающимися успехами в области оптимизации!
Здравствуйте, Pavel Dvorkin, Вы писали:
PD>Не так уж много, верно, процентов 10-15. Только вот здесь всего 2 строки конкатенируются, а у меня их было обычно 5-10. При concat второй строки проходится первая (поиск конца строки в szTotal) , при concat третьей — первая со второй, и т.д. В общем, двойной цикл
PD>Ну а вот что здесь C# дает
Здравствуйте, WolfHound, Вы писали:
WH> StringBuilder sb = new StringBuilder(); WH>... WH> for (int i = 0; i < 100000; ++i) WH> { WH> sb.Length = 0; WH> sb.Append(szFirstName); WH> sb.Append(szLastName); WH> } WH>[/c#] WH>0,04493758
Так не пойдет. Чтобы было эквивалентно С++ варианту нужно ещё из StringBuilder получить String.
WH>Оптимизированый вариант на C# получается на уровне С++ Ну чуть медленнее. WH>Кстати для корректности теста перепиши свои на wchar_t.
Здравствуйте, GlebZ, Вы писали:
GZ>Здравствуйте, alexeiz, Вы писали:
A>>Так не пойдет. Чтобы было эквивалентно С++ варианту нужно ещё из StringBuilder получить String. GZ>Почему?
В C++ версии на входе две строки на выходе одна. В C# — на выходе какой-то буфер (StringBuilder то есть). Чтобы его использовать как строку, нужно еще совершить преобразование.
Здравствуйте, alexeiz, Вы писали:
A>Здравствуйте, GlebZ, Вы писали:
GZ>>Здравствуйте, alexeiz, Вы писали:
A>>>Так не пойдет. Чтобы было эквивалентно С++ варианту нужно ещё из StringBuilder получить String. GZ>>Почему?
A>В C++ версии на входе две строки на выходе одна. В C# — на выходе какой-то буфер (StringBuilder то есть). Чтобы его использовать как строку, нужно еще совершить преобразование.
Неа. На выходе один и тот же буфер содержащий строку. 100 байт стека. StringBuilder.ToString() — это не преобразование строки, а возврат буфера в виде строки. То есть все абсолютно аналогично.
Другой вопрос в Net с одним и тем же буфером создавать две строки нельзя. Поэтому аналогичным будет создание всегда новой строки.
Здравствуйте, GlebZ, Вы писали:
GZ>Здравствуйте, alexeiz, Вы писали:
A>>Здравствуйте, GlebZ, Вы писали:
GZ>>>Здравствуйте, alexeiz, Вы писали:
A>>>>Так не пойдет. Чтобы было эквивалентно С++ варианту нужно ещё из StringBuilder получить String. GZ>>>Почему?
A>>В C++ версии на входе две строки на выходе одна. В C# — на выходе какой-то буфер (StringBuilder то есть). Чтобы его использовать как строку, нужно еще совершить преобразование. GZ>Неа. На выходе один и тот же буфер содержащий строку. 100 байт стека. StringBuilder.ToString() — это не преобразование строки, а возврат буфера в виде строки. То есть все абсолютно аналогично.
Только с той разницей, что чтобы преобразовать буфер в строку в C, не нужно делать ничего. Например, нам надо передать строку после конкатенации в функцию foo(char*). В C — просто передаём этот самый буфер. В C# функция будет выглядеть как foo(string), и чтобы передать туда результирующую строку нам нужно сначала преобразовать StringBuffer в String.
GZ>Другой вопрос в Net с одним и тем же буфером создавать две строки нельзя. Поэтому аналогичным будет создание всегда новой строки.
В этом тесте используется конкретная возможность C — создание строк на стеке с прямой целью, чтобы показать приемущество этого языка по сравнению с C#.
Здравствуйте, GlebZ, Вы писали:
ПК>>С такими ошибками в C++ шаблоны могут помочь бороться. GZ>Заметка из жизни. Если у программиста проблемы с ДНК, то C# многое прощает, а вот шаблоны в С++ многое усугубляют.
Не. Если проблемы в ДНК, то этому человеку Шарп уже не поможит. Но несоменно что в виду типобезопасности и малограбельности Шарп делает более защищенными тех кто волею судеб вынужден рабоатать в одной команде с наситями проблемных ДНК.
... << RSDN@Home 1.2.0 alpha rev. 618>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, GlebZ, Вы писали:
GZ>Не думал что подобная заметка из жизни вызывет флейм о вилках и детской посуде.
Хэх. Не знашь ты жизни. Скажу чесно я точно знал реакцию. Она просто не могла быть другой.
И дело тут в психологии. Людям больше всего ненравится признавать свои ошибки и недостатки в любимых вещах. Причем если это не делать, то со временем формируется те самые мании и фобии.
GZ>Так что если говорить о промышленных языках, то я бы сказал что они есть компромисс — помочь первым, и не мешать вторым.
Любое достойное дело и или вещь является компромисом. Бескомромисной может быть только вера и преданность.
... << RSDN@Home 1.2.0 alpha rev. 618>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Pavel Dvorkin, Вы писали:
PD>Здравствуйте, srggal, Вы писали:
S>>Здравствуйте, Pavel Dvorkin, Вы писали:
S>>Хоть Вы и читтер уважаемый, ан все равно приятно увидеть Думмера, ( поглаживая свой БФЖ ), и вспоминать как БФЖ рулит на 7мом уровне в дедматч. Эххх.
PD>Ради бога, переведи на русский, а то я даже не знаю, как на все это реагировать .
PD>P.S. Код, который ты цитируешь — не мой, см.
Уппс, ошибочка вышла.... Еще одна проблема с копипастом
Выделенные строки это читкоды легендарного дума, если не ошибаюсь:
Здравствуйте, Дарней, Вы писали:
Д>то есть, вариант с strcat медленнее более чем в два раза Д>и здесь еще только четыре строки — при росте количества строк и их длины разрыв увеличится еще больше Д>поздравляю вас, товарищ, с выдающимися успехами в области оптимизации!
Батенька, вы бы хоть читали внимательно. Я и писал-то, что strcat медленнее.