2012-04-06 37 views
5

Tôi đang cố gắng sử dụng gói Go "time" để đánh giá một chức năng trong chương trình của mình. Đã được tìm kiếm xung quanh, và mọi người dường như sử dụng time.NanoSeconds() - nhưng tôi nghĩ rằng chức năng này không còn trong gói thời gian?Mã điểm chuẩn với Đồng hồ bấm giờ hoặc tương tự

Điều tôi cần là cách dễ dàng để bắt đầu và dừng hẹn giờ và in giá trị.

+0

Tôi tin rằng chức năng giờ đây tương đương với 'time.Now(). UnixNano()'. – Ashe

Trả lời

9

Sử dụng các chức năng hiện có của testing gói bên trong * _test.go của bạn:

func BenchmarkMyFunc(b *testing.B) { 
    for i := 0; i < b.N; i++ { 
     myBecnhmarkedFunction() 
    } 
} 

và gọi go test -bench RE (RE là một regexp để chọn băng ghế, như B vì nó có nghĩa *B*) thường bên trong gói/thư mục công cụ

Hoặc rõ ràng từ bất kỳ vị trí nào trong mã của bạn - hãy sử dụng hàm Benchmark.

+1

Cảm ơn câu trả lời! Ngay trước khi tôi đọc câu trả lời của bạn, tôi đã tìm thấy một ví dụ dễ dàng về cách sử dụng gói thời gian của Go, đó là khá nhiều cho tôi. Tôi cũng sẽ xem xét chức năng đo điểm chuẩn. 't0: = time.Now() expensiveCall() t1: = time.Now() fmt.Printf (" Cuộc gọi mất% v để chạy. \ N ", t1.Sub (t0))' – shaz

+1

Cách tiếp cận đó là OK/tốt/đủ chính xác chỉ để thực thi 'expensiveCall()' đủ dài, như trong các đơn đặt hàng có độ dài thời gian dài hơn độ phân giải thời gian của máy. Gói thử nghiệm có thể xử lý thời gian chính xác nano giây bằng cách thay đổi thích nghi thông số b.N. – zzzz

+0

@shaz Bạn cũng có thể sử dụng time.Since: t0: = time.Now(); expensiveCall(); println ("Time:", time.Since (t0)) – BurntSushi5

Các vấn đề liên quan