gpt4 book ai didi

去运行性能

转载 作者:数据小太阳 更新时间:2023-10-29 03:41:28 27 4
gpt4 key购买 nike

考虑以下基准:

package main

import (
"io/ioutil"
"os"
"os/exec"
"testing"
)

func BenchmarkRun(b *testing.B) {
for i := 0; i < b.N; i++ {
source := `package main

import "fmt"

func main() {
fmt.Println("foo")
}`
if err := ioutil.WriteFile("cmd.go", []byte(source), 0777); err != nil {
b.Error(err)
}
defer os.Remove("cmd.go")

if err := exec.Command("go", "run", "cmd.go").Run(); err != nil {
b.Error(err)
}
}
}

每次操作大约需要 0.3 秒。

有什么方法可以加快编译/运行周期吗?

写一个临时文件然后exec go run看起来很笨拙。有没有办法在不这样做的情况下调用编译器?

最佳答案

您始终可以创建一个二进制文件并在以后使用它。示例:

package main

import (
"io/ioutil"
"os"
"os/exec"
"path"
"testing"
)

func BenchmarkRun(b *testing.B) {
tmpdir, err := ioutil.TempDir("", "go-bench-")
if err != nil {
b.Fatal(err)
}
defer os.RemoveAll(tmpdir)

source := `package main

import "fmt"

func main() {
fmt.Println("foo")
}`
if err := ioutil.WriteFile(path.Join(tmpdir, "cmd.go"), []byte(source), 0777); err != nil {
b.Fatal(err)
}
defer os.Remove(path.Join(tmpdir, "cmd.go"))

cmd := exec.Command("go", "build", "-o", "cmd", ".")
cmd.Dir = tmpdir
if err := cmd.Run(); err != nil {
b.Fatal(err)
}
defer os.Remove(path.Join(tmpdir, "cmd"))

b.ResetTimer()
for i := 0; i < b.N; i++ {
if err := exec.Command(path.Join(tmpdir, "cmd")).Run(); err != nil {
b.Error(err)
}
}
}

关于去运行性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30945605/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com