Do Not Think!!!

최근 사진

사무실 이사
2011/12시즌 2011년 12월 17일 휘닉스파크
2011/12시즌 2011년 12월 10일 휘닉스파크
2011/12시즌 2011년 12월 4일 휘닉스파크
2011/12시즌 2011년 11월 26일 휘닉스파크
2011년 8월 뉴질랜드 여행
2011년 5월 4일 ~ 7일 홍콩 워크샵 사람
2011년 5월 4일 ~ 7일 홍콩 워크샵 넷 째날
2011년 5월 4일 ~ 7일 홍콩 워크샵 셋 째날
2011년 5월 4일 ~ 7일 홍콩 워크샵 둘 째날

최근 트랙백

Total215284
Today41
Yesterday92
2008/10/30 16:58

Java 정규표현식 성능 개선 by 조영운

간만에 삽질 좀 했습니다.

몇일 전 부터 RSS 수집기가 말썽을 일으켰는데, 이 문제를 수정하느라고 한참을 고생했습니다.
계속해서 해당 프로세스가 CPU와 메모리 자원을 한없이 먹는 문제가 발생을 했는데...
thread dump를 확인한 결과 찾은 문제는, 정규표현식으로 이미지 주소를 추출하는 부분이었습니다.

이 문제를 해결하기 위해, 정규표현식 성능을 높이기 위한 방법을  좀 찾아봤습니다. 그 중에서, 몇가지 방법이 나와있는데, 이 중에서
  • STEP 1 : 정규표현식을 적용할 문자열이 길면, 성능이 떨어지기 때문에, 정규표현식을 적용할 문자열을 짧게 합니다.
desc = desc.substring(0, 1000);
  • STEP 2 : 정규표현식이 적용되지 않는 문자열을 필터링 합니다.
if (0 > desc.indexOf("<img ") && 0 > desc.indexOf("<IMG ")) {
return;
}

  • STEP 3 : Pattern.compile 을 한번만 해서 재사용
private static Pattern pattern = Pattern.compile("<img.+?src=\"(.+?)\"", Pattern.CASE_INSENSITIVE);


이렇게 적용을 했더니,
STEP 0 - 3639 ms
STEP 1 - 2647 ms
STEP 2 - 2148 ms
STEP 3 - 1900 ms

이렇게 시간이 많이 절약이 됐네요.

크리에이티브 커먼즈 라이센스
Creative Commons License

Trackback Address :: http://dont.pe.kr/tt/trackback/186

  1. egg 2008/10/31 00:13 댓글주소 수정/삭제 댓글쓰기

    오~~ 형님 짱!!!

Name

Password

Homepage

Secret