mirror of
https://github.com/tmrts/go-patterns.git
synced 2024-11-24 05:56:08 +03:00
profiling/timing: implement execution time profiler
This commit is contained in:
parent
418cd23c0a
commit
90f5b5b1a5
@ -98,7 +98,7 @@ A curated collection of idiomatic design & application patterns for Go language.
|
||||
|
||||
| Pattern | Description | Status |
|
||||
|:-------:|:----------- |:------:|
|
||||
| [Timing Functions](/profiling/timing.md) | Wraps a function and logs the execution | ✘ |
|
||||
| [Timing Functions](/profiling/timing.md) | Wraps a function and logs the execution | ✔ |
|
||||
|
||||
## Idioms
|
||||
|
||||
|
38
profiling/timing.md
Normal file
38
profiling/timing.md
Normal file
@ -0,0 +1,38 @@
|
||||
# Timing Functions
|
||||
|
||||
When optimizing code, sometimes a quick and dirty time measurement is required
|
||||
as opposed to utilizing profiler tools/frameworks to validate assumptions.
|
||||
|
||||
Time measurements can be performed by utilizing `time` package and `defer` statements.
|
||||
|
||||
## Implementation
|
||||
|
||||
```go
|
||||
package profile
|
||||
|
||||
import (
|
||||
"time"
|
||||
"log"
|
||||
)
|
||||
|
||||
func Duration(invocation time.Time, name string) {
|
||||
elapsed := time.Since(invocation)
|
||||
|
||||
log.Printf("%s lasted %s", name, elapsed)
|
||||
}
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
```go
|
||||
func IntFactorial(x big.Int) *big.Int {
|
||||
defer profile.Duration(time.Now(), "IntFactorial")
|
||||
|
||||
y := big.NewInt(1)
|
||||
for one := big.NewInt(1); x.Sign() > 0; x.Sub(x, one) {
|
||||
y.Mul(y, x)
|
||||
}
|
||||
|
||||
return x.Set(y)
|
||||
}
|
||||
```
|
Loading…
Reference in New Issue
Block a user