[Java] 정규 표현식에서 제어 문자를 제외하면 상당히 느리다

7015 단어 Java

INDEX

  • 개요
  • 인증번호
  • 검증 결과
  • 요약
  • 추기(2018/06/05)
  • 추기 총결산(2018/06/05)
  • 개요


    성기도 아니고 색마도 아니야!# 축장 대사메이커https://t.co/rHdsYHelTL-(@mahny b)pic.twitter.com/jo7oZxH3f9
    따라서 String#replace All을 사용하여 제어 문자를 제거하면 서버 응답이 느려지기 때문에 인증코드를 써 보려면 좀 늦을 수 있습니다.

    인증 코드

  • 다음 처리를 위한 코드2018년 6월 3일를 준비했습니다.
  • ASCII 테스트 데이터만 생성
  • 제어 문자를 String#replace All로 바꿉니다.
  • 1000회 구현 기록
  • String#chatAt 판별 제어 문자를 통해 새 문자열 생성
  • 1000회 구현 기록
  • 코드 사용 방법


  • 테스트 데이터를 생성하기 위해 GiitHub를 실행합니다.
  • resources/test.txt 출력
  • GeneratteTestData 클래스

  • 실행SpeedCrazy Replace All 등급
  • 검증 결과

  • 내 PC 환경에서charAt는replaceeAll보다 약 2배 빠르다.
  • 시험 횟수
    replaceAll
    charAt
    1
    11,170
    5,377
    2
    11,337
    5,437
    3
    11,203
    5,418
    4
    11,114
    5,489
    5
    11,294
    5,527
    ※ 단위는 ms

    총결산

  • 정규 표현식은 매우 편리하지만 대량의 데이터를 처리해야 하는 상황에서 모두 교체한 실제 포장이 아니므로 제한적으로 사용하는 것에 주의해야 한다.SpeedCrazyCharaAt 레벨
  • 추기 (2018/06/05)

  • Pattern.컴플렉스로 실례를 미리 만드는 게 어떻냐는 댓글이 올라와 추가 검증을 했다.
  • 인증 코드


  • 1.
  • 검증 결과

  • ↑ 검증에서는 달라붙은 Eclipse에서 시행됐기 때문에 이번에 콘솔에서 시행됐다.
  • mahny@ALFA c:\Users\mahny\Desktop\speedcrazy
    > java -cp .;speedcrazy.jar jp.gr.mahny_conf.replaceall_charat.GenerateTestData
    
    mahny@ALFA c:\Users\mahny\Desktop\speedcrazy
    > java -cp .;speedcrazy.jar jp.gr.mahny_conf.replaceall_charat.SpeedCrazyReplaceAll
    合計時間 : 12006(ms), 平均時間 : 12(ms)
    
    mahny@ALFA c:\Users\mahny\Desktop\speedcrazy
    > java -cp .;speedcrazy.jar jp.gr.mahny_conf.replaceall_charat.SpeedCrazyPattern
    合計時間 : 11023(ms), 平均時間 : 11(ms)
    
    mahny@ALFA c:\Users\mahny\Desktop\speedcrazy
    > java -cp .;speedcrazy.jar jp.gr.mahny_conf.replaceall_charat.SpeedCrazyCharAt
    合計時間 : 5589(ms), 平均時間 : 5(ms)
    
    mahny@ALFA c:\Users\mahny\Desktop\speedcrazy
    > java -cp .;speedcrazy.jar jp.gr.mahny_conf.replaceall_charat.GenerateTestData
    
    mahny@ALFA c:\Users\mahny\Desktop\speedcrazy
    > java -cp .;speedcrazy.jar jp.gr.mahny_conf.replaceall_charat.SpeedCrazyReplaceAll
    合計時間 : 11189(ms), 平均時間 : 11(ms)
    
    mahny@ALFA c:\Users\mahny\Desktop\speedcrazy
    > java -cp .;speedcrazy.jar jp.gr.mahny_conf.replaceall_charat.SpeedCrazyPattern
    合計時間 : 10947(ms), 平均時間 : 10(ms)
    
    mahny@ALFA c:\Users\mahny\Desktop\speedcrazy
    > java -cp .;speedcrazy.jar jp.gr.mahny_conf.replaceall_charat.SpeedCrazyCharAt
    合計時間 : 5573(ms), 平均時間 : 5(ms)
    
    mahny@ALFA c:\Users\mahny\Desktop\speedcrazy
    > java -cp .;speedcrazy.jar jp.gr.mahny_conf.replaceall_charat.GenerateTestData
    
    mahny@ALFA c:\Users\mahny\Desktop\speedcrazy
    > java -cp .;speedcrazy.jar jp.gr.mahny_conf.replaceall_charat.SpeedCrazyReplaceAll
    合計時間 : 11038(ms), 平均時間 : 11(ms)
    
    mahny@ALFA c:\Users\mahny\Desktop\speedcrazy
    > java -cp .;speedcrazy.jar jp.gr.mahny_conf.replaceall_charat.SpeedCrazyPattern
    合計時間 : 11152(ms), 平均時間 : 11(ms)
    
    mahny@ALFA c:\Users\mahny\Desktop\speedcrazy
    > java -cp .;speedcrazy.jar jp.gr.mahny_conf.replaceall_charat.SpeedCrazyCharAt
    合計時間 : 5594(ms), 平均時間 : 5(ms)
    
    mahny@ALFA c:\Users\mahny\Desktop\speedcrazy
    > java -cp .;speedcrazy.jar jp.gr.mahny_conf.replaceall_charat.GenerateTestData
    
    mahny@ALFA c:\Users\mahny\Desktop\speedcrazy
    > java -cp .;speedcrazy.jar jp.gr.mahny_conf.replaceall_charat.SpeedCrazyReplaceAll
    合計時間 : 11201(ms), 平均時間 : 11(ms)
    
    mahny@ALFA c:\Users\mahny\Desktop\speedcrazy
    > java -cp .;speedcrazy.jar jp.gr.mahny_conf.replaceall_charat.SpeedCrazyPattern
    合計時間 : 10829(ms), 平均時間 : 10(ms)
    
    mahny@ALFA c:\Users\mahny\Desktop\speedcrazy
    > java -cp .;speedcrazy.jar jp.gr.mahny_conf.replaceall_charat.SpeedCrazyCharAt
    合計時間 : 5593(ms), 平均時間 : 5(ms)
    
    mahny@ALFA c:\Users\mahny\Desktop\speedcrazy
    > java -cp .;speedcrazy.jar jp.gr.mahny_conf.replaceall_charat.GenerateTestData
    
    mahny@ALFA c:\Users\mahny\Desktop\speedcrazy
    > java -cp .;speedcrazy.jar jp.gr.mahny_conf.replaceall_charat.SpeedCrazyReplaceAll
    合計時間 : 11164(ms), 平均時間 : 11(ms)
    
    mahny@ALFA c:\Users\mahny\Desktop\speedcrazy
    > java -cp .;speedcrazy.jar jp.gr.mahny_conf.replaceall_charat.SpeedCrazyPattern
    合計時間 : 11049(ms), 平均時間 : 11(ms)
    
    mahny@ALFA c:\Users\mahny\Desktop\speedcrazy
    > java -cp .;speedcrazy.jar jp.gr.mahny_conf.replaceall_charat.SpeedCrazyCharAt
    合計時間 : 5584(ms), 平均時間 : 5(ms)
    
    mahny@ALFA c:\Users\mahny\Desktop\speedcrazy
    >
    
    시험 횟수
    String#replaceAll
    Pattern#match
    String#charAt
    1
    12,006
    11,023
    5,589
    2
    11,189
    10,497
    5,573
    3
    11,038
    11,152
    5,594
    4
    11,201
    10,829
    5,593
    5
    11,164
    11,049
    5,584
    ※ 단위는 ms
    응, 조금 빨랐어... 근데 생각보다 효과가 없네...코드를 잘 못 쓰나요?

    추기 총결산(2018/06/05)

  • 단일 Pattern 인스턴스SpeedCrazyPattern 레벨를 준비하는 경우 String#replace All을 사용할 때보다 약 4% 개선
  • 말은 그렇지만 카르텔을 사용하는 자리에서 이렇게 하는 것이 좋다. 정규 표현의 사용 방법에 대한 생각은 변하지 않도록 주의해야 한다
  • 실제 정규 표현식을 사용하여 구현할 때 AP 처리가 완료되지 않아 응답이 없음 확인...무서워2
    Pattern반 번호만 봐도 Pattern을 볼 수 있어요.compile(String)의 매개 변수에 따라 생성 실례에 많은 시간이 걸릴 것 같아서 이번처럼 단순히 제어 문자를 삭제하는 것이 아니라 복잡한 정규적 표현을 가져오면 더 많은 차이가 있지 않을까 생각합니다.그렇게 복잡하면 캐럿 같은 것도 쓸 수 있는 게 아니니까 다음에 한번 검증해 보세요. 

    좋은 웹페이지 즐겨찾기