하위 도메인에서 도메인 접미사를 잘라내는 데 2 가지 방법이 있는데 어떤 것이 더 빠릅니까? 어떻게해야합니까?두 가지 방법 중 더 빠른 방법을 찾는 방법은 무엇입니까?
답변
당신은 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 collector 및 running your samples long enough)이 있으므로 사용자 자신의 벤치마킹 작성을 권장하지 않습니다.
샘플 속도를 높이려면 어떻게해야합니까? 이전에 pprof 기사를 읽었지만 처음에는 너무 복잡해 보였습니다. 항상 URL을 말리려고했는데 그런 파일이나 디렉토리 http://pastebin.com/0Ff7DWP7 –
문자열을 다듬는 2 가지 방법 중 어느 것이 더 빠를지는 모르겠지만 그 대답을 받아 들일 것입니다. 그러나 일반적으로 충분합니다 질문/대답. 누구든지 더 나은 대답을하면 기꺼이 받아 들일 것입니다. 시간을 보냅니다.()와. Sub()는 대다수의 경우 TrimSuffix() 방법이 더 빠르다는 것을 보여주었습니다. 두 가지 모두 250ns로 시작했으며 TrimSuffix()는 70ns에 가까워서 [: s]는 대부분 ~ 130ns였습니다. 그런 다음 TrnsSuffix (~ 250ns)의 이상한 스파이크로 70ns에 가까워졌습니다. Idk 믿을만한 시간입니다. 이제()와 Sub()입니다. –
미안하지만 벤치 마크를 엉망으로 만들었습니다. 예. 벤치 마크 도구 요구 (b.N')만큼 자주 테스트를 실행하는 것을 잊어 버렸습니다. 벤치 마크 도구의 샘플 속도는 자동으로 결정되므로 직접 수정할 수 없으며 pprof와는 아무런 관련이 없습니다. 나는 방금 코드 성능면에서 실제 문제를 해결하지 못하는 마이크로 벤치 마크로 시간을 낭비하기 전에 프로파일 링을 고려해야한다는 것을 의미했습니다. – nemo
- 1. 목록을 찾는 가장 빠른 방법은 두 가지 항목을 포함하고 있습니까?
- 2. 방법은 두 가지 방법을 함께
- 3. before_filter에서 두 가지 방법을 실행하는 방법은 무엇입니까?
- 4. Android에서 두 가지 방법을 동기화하는 방법은 무엇입니까?
- 5. Java에서 두 가지 방법을 빼는 방법은 무엇입니까?
- 6. JAVA에서 두 가지 방법을 결합하는 방법은 무엇입니까?
- 7. 두 가지 이벤트를 찾는 방법
- 8. 두 가지 방법을 결합하는 방법
- 9. GUID를 찾는 빠른 방법
- 10. splinter : 요소를 찾는 더 빠른 방법?
- 11. 시간이 걸리는 복제본을 찾는 더 빠른 방법
- 12. 두 가지 빠른 Ruby 질문
- 13. 두 가지 방법을 하나로 결합하십시오
- 14. Ember.js에서 두 가지 이상의 유형의 레코드를 모두 찾는 방법은 무엇입니까?
- 15. 목록에서 항목을 찾는 가장 빠른 방법은 무엇입니까?
- 16. 두 가지 중 어느 것이 파일 조작이 더 낫습니다?
- 17. 유닉스에서 두 파일 간의 차이점을 찾는 가장 빠른 방법은 무엇입니까?
- 18. 두 가지 중 하나를 캡처하는 방법, 두 가지 중 하나를 캡처하는 방법
- 19. 두 가지 목표를 달성하고 돌아 오는 날짜를 찾는 방법은 무엇입니까?
- 20. 배열에서 정수를 찾는 가장 빠른 방법은 무엇입니까?
- 21. 일치하지 않는 괄호 : 빠른 방법을 찾으십니까?
- 22. 이 두 가지 DB 설계 중 어떤 것이 더 빠른 쿼리로 이어질 것입니까?
- 23. 이클립스에서 두 가지 방법을 비교하는 방법
- 24. DataTable/DataRowsCollection에 액세스하는 더 빠른 방법은 무엇입니까?
- 25. 이 2 가지 방법을 더 효율적으로 만드는 방법
- 26. 셰어 포인트 페이지에서 컨트롤을 찾는 더 빠른 방법 편집, 신규
- 27. 이 두 가지 방법을 일반적인 방법으로 변환하는 방법은 무엇입니까?
- 28. 예외 발생 방법을 찾는 방법
- 29. 두 가지 방법을 병렬로 실행
- 30. 두 가지 방법을 함께 사용
@Leo 이것은 Java가 아니며 OP가 [jgo] (http://code.google.com/p/jgo/)를 사용하고있는 것으로 의심됩니다. – nemo
블로그 게시물이 10ns 최적화의 이점을 과장한다고 생각합니다./op. – elithrar
@nemo 너무 죄송합니다 .-- (그 점을 바로 잡으십시오. – Leo