Вверх ↑
Ответов: 1528
Рейтинг: 57
#1: 2011-12-28 11:01:46 ЛС | профиль | цитата
Dilma, можно этот же скрипт под IC? Для сравнения.
------------ Дoбавленo в 06.51:
Dilma, в Java так с текстом никогда не работают!
вот правильно
#cppStringBuffer s = new StringBuffer("*"); 
for(int i = 0; i < 10000; i++)
s.append("*").toString();

------------ Дoбавленo в 14.57:
#cpp
String st = "Маша";
st += "Саша"+"и"+st;
Опишу работу такого скрипта

Сначало создаётся слово
Маша
Саша
Саша и
Саша и Маша

Все эти слова одновременно будут находиться в памяти, пока неиспользуемые фрагменты соберёт сборщик мусора.
------------ Дoбавленo в 14.59:
Что будет если так вот поступать в цикле хорошо показано в цикле от Dilma.
------------ Дoбавленo в 15.04:
И ещё быстрее можно ускорить используя StringBuilder вместо StringBuffer
------------ Дoбавленo в 08.07:
Бенчмарки C#, C++, Java, Delphi
------------ Дoбавленo в 10.20:
Ещё вариант на StringBuilder, очень быстрый с 1 000 000 интераций.
#cpp
StringBuilder sb = new StringBuilder();
for (int i=0; i<1000000; i++)
{ sb.append("*"); }
String s = sb.toString();
------------ Дoбавленo в 18.44:
Тесты в ms на 10000 итераций
Скрипт от Dilma - 291
Мой вариант на StringBuffer - 88
Второй вариант на StringBuilder - 4

Тесты в ms на 100000 итераций
Скрипт от Dilma - 34645
Мой вариант на StringBuffer - 8857
Второй вариант на StringBuilder - 9
Второй вариант на StringBuilder на 1000000 итераций - 54


------------ Дoбавленo в 10.52:
хм, в StringBuffer ошибку сделал, так правильно
#cpp
StringBuffer s = new StringBuffer();
for(int i = 0; i < 10000; i++)
s.append("*");

------------ Дoбавленo в 11.01:
Из этого видим что если использовать самый быстрый метод, разрыв с производительностью пакета Windows без использования FTCG возможностей будет всего-то в ~611 раз.
Нужно ещё сделать замеры на чистом IC.
карма: 0

0