2014-02-06 4 views
3

하위 도메인에서 도메인 접미사를 잘라내는 데 2 ​​가지 방법이 있는데 어떤 것이 더 빠릅니까? 어떻게해야합니까?두 가지 방법 중 더 빠른 방법을 찾는 방법은 무엇입니까?

2 string trimming methods

+0

@Leo 이것은 Java가 아니며 OP가 [jgo] (http://code.google.com/p/jgo/)를 사용하고있는 것으로 의심됩니다. – nemo

+0

블로그 게시물이 10ns 최적화의 이점을 과장한다고 생각합니다./op. – elithrar

+0

@nemo 너무 죄송합니다 .-- (그 점을 바로 잡으십시오. – Leo

답변

5

당신은 go test의 내장 benchmark capabilities를 사용할 수 있습니다. 예를 들어

(on play) :

import (
    "strings" 
    "testing" 
) 


func BenchmarkStrip1(b *testing.B) { 
    for br := 0; br < b.N; br++ { 
     host := "subdomain.domain.tld" 

     s := strings.Index(host, ".") 
     _ = host[:s] 
    } 
} 

func BenchmarkStrip2(b *testing.B) { 
    for br := 0; br < b.N; br++ { 
     host := "subdomain.domain.tld" 

     strings.TrimSuffix(host, ".domain.tld") 
    } 
} 

스토어 somename_test.go이 코드와 go test -test.bench='.*'를 실행합니다. 나를 위해이 제공 다음과 같은 출력 :

% go test -test.bench='.*' 
testing: warning: no tests to run 
PASS 
BenchmarkStrip1 100000000   12.9 ns/op 
BenchmarkStrip2 100000000   16.1 ns/op 
ok  21614966 2.935s 

벤치 마크 유틸리티 것이다 attempt to do a certain number of runs 의미있는 시간이 수 100000000로 출력에 반영됩니다 측정 때까지. 코드는 100000000 번 실행되었고 루프의 각 작업에는 각각 12.9 ns와 16.1 ns가 소요되었습니다. BenchmarkStrip1의 코드가 더 잘 수행되었다고 결론 지을 수 있습니다.

결과에 관계없이 실제 병목 현상이 이러한 마이크로 벤치 마크와 함께 시간을 낭비하는 대신에 어디에 있는지보기 위해 profile your program에 자주하는 것이 좋습니다.

을 고려하지 않은 몇 가지 요인 (예 : the garbage collectorrunning your samples long enough)이 있으므로 사용자 자신의 벤치마킹 작성을 권장하지 않습니다.

+0

샘플 속도를 높이려면 어떻게해야합니까? 이전에 pprof 기사를 읽었지만 처음에는 너무 복잡해 보였습니다. 항상 URL을 말리려고했는데 그런 파일이나 디렉토리 http://pastebin.com/0Ff7DWP7 –

+0

문자열을 다듬는 2 가지 방법 중 어느 것이 더 빠를지는 모르겠지만 그 대답을 받아 들일 것입니다. 그러나 일반적으로 충분합니다 질문/대답. 누구든지 더 나은 대답을하면 기꺼이 받아 들일 것입니다. 시간을 보냅니다.()와. Sub()는 대다수의 경우 TrimSuffix() 방법이 더 빠르다는 것을 보여주었습니다. 두 가지 모두 250ns로 시작했으며 TrimSuffix()는 70ns에 가까워서 [: s]는 대부분 ~ 130ns였습니다. 그런 다음 TrnsSuffix (~ 250ns)의 이상한 스파이크로 70ns에 가까워졌습니다. Idk 믿을만한 시간입니다. 이제()와 Sub()입니다. –

+1

미안하지만 벤치 마크를 엉망으로 만들었습니다. 예. 벤치 마크 도구 요구 (b.N')만큼 자주 테스트를 실행하는 것을 잊어 버렸습니다. 벤치 마크 도구의 샘플 속도는 자동으로 결정되므로 직접 수정할 수 없으며 pprof와는 아무런 관련이 없습니다. 나는 방금 코드 성능면에서 실제 문제를 해결하지 못하는 마이크로 벤치 마크로 시간을 낭비하기 전에 프로파일 링을 고려해야한다는 것을 의미했습니다. – nemo

관련 문제