다음은 속도를 향상시키기 위해 노력한 코드 조각입니다.decode_utf8은 실행 시간을 소모합니다.
use strict;
use warnings;
use Encode;
open(IN,"<utf8",$ARGV[0]) or die "Cannot open $ARGV[0]:$!\n"; ##treat it as a huge data of 35,000 lines in devnagari script.
my @in = <IN>;
close(IN);
my $key = "अच्छा"; #key to be matched contains devanagari script as a string
foreach my $in(@in) {
chomp($in);
$key = decode_utf8($key);
$in = decode_utf8($in);
if($key eq $in) {
print "$key: matched\n";
}
else {
print "Not matched\n";
}
}
파일의 줄을 키와 일치 시키려고합니다. 내 코드를 프로파일 링하면 다음과 같은 결과가 나타납니다.
결과 decode_utf8
시간의 34 %를 소비하도록한다. 데이터가 utf8이므로 decode_utf8
을 사용했습니다.
여기서 속도를 향상 시키려면 어떻게해야합니까? 코드에서 decode_utf8
을 유니 코드 데이터와 일치시키는 다른 해결 방법.
파일 핸들에서 PerlIO 레이어를 사용하는 경우 디코딩이 수행됩니다. ('utf8'은 아무 의미도 없지만, 실제로는 : : encoding (utf8)을 원한다고해도': utf8'을 의미했을 것입니다.) 소스 코드에 유니 코드 문자가 있다면'utf8;을 사용해야합니다. .당신이 필요하지 않다면 전체 파일을 메모리로 읽어서는 안되며, 같은 이름을 가진 배열과 스칼라는 없어야합니다. 왜냐하면 혼란 스럽기 때문입니다. –
그리고 코드에 대한 명백한 어리 석음에도 불구하고 총 실행 시간은 여전히 1 초 미만입니다. 왜 그보다 더 빠를 필요가 있을까요? –
에 대해 자세히 설명하지 않고 decode_utf8에 소요되는 시간을 절반으로 줄일 수 있습니다. 일반적으로 $ key에서 모든 함수를 호출하고 있습니다. 당신은 그것을 루프 밖으로 옮기고 my $ key_decoded = decode_utf8 ($ key)를 사용할 수 있습니다. 루프 내에서 $ key_decoded를 사용하여 $ in과 비교하십시오. – vanHoesel