Re[2]: BOOST, .NET, String.Split и производительность…
От: n0name2  
Дата: 22.09.06 15:35
Оценка:
VD>Сначала результатаы (AMD Атлон 64 3500 (2.2 Ггц):
VD>
VD>[123, 345, asdf, 23453, asdfas]
VD>00:00:00.8376620
VD>5000000
VD>00:00:00.2925531
VD>5000000
VD>00:00:00.7282637
VD>5000000
VD>


второй тест некорректен т.к. substring не делает.

вот результаты java. cpu = AMD Opteron 244 (1792.154Mhz). linux. jvm — sun, 1.5.0, 32bit.
используется только одно ядро, плюс надо бы сделать поправку на меньшую частоту камня...

$ java -server -Xmx512m -Xms512m -cp . Test08
5000000
1096.069
5000000
816.764
5000000
799.736
5000000
804.585
5000000
825.1
-------------
5000000
420.443
5000000
400.156
5000000
502.719
5000000
494.193
5000000
492.967



import java.io.*;
import java.util.*;

class Test08 {
    private static int test() {
        int answer = 0;
        final List<String> list = new ArrayList<String>();
        final String text = "123 345 asdf 23453 asdfas".intern();
        for (int i = 0; i < 1000000; i++) {
            list.clear();
            for (final StringTokenizer strtok = new StringTokenizer(text);
                strtok.hasMoreTokens(); list.add(strtok.nextToken())) ;
            answer += list.size();
        }
        return answer;
    }

    private static int test1() throws UnsupportedEncodingException {
        int answer = 0;
        final String [] array = new String[5];
        final String text = "123 345 asdf 23453 asdfas".intern();
        final byte space = " ".getBytes("windows-1251")[0];
        final byte [] chars = text.getBytes("windows-1251");
        final int clen = chars.length;

        for (int i = 0, l = 0; i < 1000000; i++, l = 0) {
            for (int c = 0, x = 0; c < chars.length; c++) {
                if (chars[c] == space) {
                    array[l++] = text.substring(x, c);
                    x = c + 1;
                } else if (c == chars.length - 1 && clen - x > 1) {
                    array[l++] = text.substring(x, clen);
                }
            }
            answer += l;
        }

        return answer;
    }

    public static void x() {
        long start = System.nanoTime();
        System.out.println(test());
        System.out.println((double)(System.nanoTime() - start) / 1.0e6);
    }

    public static void y() throws UnsupportedEncodingException {
        long start = System.nanoTime();
        System.out.println(test1());
        System.out.println((double)(System.nanoTime() - start) / 1.0e6);
    }

    public static void main(String [] args) throws UnsupportedEncodingException {
        for (int i = 0; i < 5; i++) x();
        System.out.println("-------------");
        for (int i = 0; i < 5; i++) y();
    }
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.