我刚刚发现将字节写入文件对于 Go 来说很慢。
我想创建一个 10mb 的文件。Go 需要将近 1 分钟才能完成,但在 C 中不到 5 秒。
这是 Go 代码:
package main
import (
"fmt"
"os"
)
func main() {
f, _ := os.Create("./src/test/test.txt")
count := int(1.024e7)
for i := 0; i < count; i++ {
f.Write([]byte{byte('a' + i%24)})
}
f.Close()
fmt.Println("ok")
}
Run Code Online (Sandbox Code Playgroud)
和 C:
#include <stdio.h>
int main()
{
FILE *fp=fopen("data.txt","w");
int size=1.024e7;
for(int i=0;i<size;i++)
putc('a'+i%24,fp);
fclose(fp);
printf("ok");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
无意义的微基准测试会产生无意义的结果。
走:
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
f, _ := os.Create("tmp/sotest/test.txt")
w := bufio.NewWriter(f)
count := int(1.024e7)
for i := 0; i < count; i++ {
w.Write([]byte{byte('a' + i%24)})
}
w.Flush()
f.Close()
fmt.Println("ok")
}
Run Code Online (Sandbox Code Playgroud)
输出:
ok
real 0m0.159s
user 0m0.160s
sys 0m0.004s
Run Code Online (Sandbox Code Playgroud)
C:
#include <stdio.h>
int main()
{
FILE *fp=fopen("data.txt","w");
int size=1.024e7;
for(int i=0; i<size; i++)
putc('a'+i%24,fp);
fclose(fp);
printf("ok");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
ok
real 0m0.058s
user 0m0.045s
sys 0m0.004s
Run Code Online (Sandbox Code Playgroud)