Держу пари, если это действительно простой случай (без реального регулярного выражения), C победит (memchr () и друзья), в противном случае TCL будет сильным соперником, за которым следует Perl (последний требует хороших навыков крафтадля дизайна регулярных выражений).
Приложение : читая ваше описание снова (и сопровождающую ссылку), я бы сказал, что вы должны протестировать некоторые инструменты и сравнить результаты.Можете ли вы предоставить входной файл для нас (где-то) и указать точную проблему на основе этого файла?
Приложение 2 (для Фейнмана) : я сохранил этот сайт (~ 44 КБ, 'soft.dat ') и выполнил повторный поисковый тест (как вы предложили: "дизайн сайта /") в Perl.Используемый код:
...
use Benchmark qw' timeit timestr ';
{
open my $fh, '<', 'sof.dat' or die $!;
undef $/;
our $data = <$fh>;
close $fh;
my $count = 100000;
my $t = timeit($count, ' $data =~ m|site design /| ? 1 : 0 ' );
print "$count loops of code took:", timestr($t),"\n";
}
...
При моей настройке (2,4 ГГц E6600, Win7, Activeperl) вышло следующее время:
100000 циклов кода заняло:1 раз в час (1,36 usr + 0,00 sys = 1,36 CPU) @ 73746,31 / s (n = 100000)
, что означает, что я могу найти этот текст на этой странице около 74 тысяч раз в секунду.
Если я включу полную обработку файла:
use Benchmark qw' timeit timestr ';
{
my $count = 10000;
my $t = timeit($count, q{
open my $fh, '<', 'sof.dat' or die $!;
undef $/;
our $data = <$fh>;
close $fh;
$data =~ m|site design /| ? 1 : 0
} );
print "$count loops of code took:", timestr($t),"\n";
}
, мы получим только:
10000 циклов кода заняло: 3 секунды Wallclock (1,70 usr +1,51 sys = 3,21 CPU) @ 3110,42 / s (n = 10000)
около 3 тысяч проходов поиска / поиска в секунду.
С уважением
rbo