版本信息

  • 仓颉版本 0.53.18
  • Golang版本 1.22.8
  • Java版本 corretto-1.8.0_452

源码

仓颉

package cangjie_test

import std.time.MonoTime
import std.sync.SyncCounter
import std.fs.*

main() {
    let start = MonoTime.now()
    for (i in 1..11) {
        write(i)
    }
    println("耗时: ${(MonoTime.now()-start).toMilliseconds()} ms")
}

func write(index: Int) {
    let filePath = "./log_cangjie_no_buffer_${index}.txt"
    let rows = 100000
    try (file = File(filePath, OpenOption.CreateOrTruncate(true))) {
        for (i in 1..rows + 1) {
            file.write("${i}\n".toArray())
        }
        file.flush()
    }
}

Java

package java_test;

import java.io.File;
import java.io.FileOutputStream;

public class Main {
    public static void main(String[] args) throws Exception {
        final long start = System.currentTimeMillis();
        for (int i = 1; i < 11; i++) {
            write(i);
        }
        System.out.println(String.format("耗时: %d ms", System.currentTimeMillis() - start));
    }

    static void write(int index) throws Exception {
        final String filePath = "./log_java_no_buffer_" + index + ".txt";
        final long rows = 100000; // 写入10W行内容
        File file = new File(filePath);
        try (FileOutputStream writer = new FileOutputStream(file)) {
            for (long i = 1; i < rows + 1; i++) {
                writer.write((i + "\n").getBytes());
            }
            writer.flush(); // 刷入内容
        }
    }
}

Golang

package main

import (
	"fmt"
	"os"
	"time"
)

func main() {
	start := time.Now()
	for i := 1; i < 11; i++ {
		write(i)
	}
	fmt.Printf("耗时: %d ms\n", time.Now().Sub(start).Milliseconds())
}

func write(index int) {
	filePath := fmt.Sprintf("./log_go_no_buffer_%d.txt", index)
	rows := 100000
	file, err := os.Create(filePath)
	if err != nil {
		panic(err)
	}
	defer file.Close()
	for i := 1; i < rows+1; i++ {
		file.WriteString(fmt.Sprintf("%d\n", i))
	}
}

结果

语言 版本 结果
Java corretto-1.8.0_452 1727 ms
Golang 1.22.8 1611 ms
仓颉 非优化 0.53.18 1750 ms
仓颉 O1优化 0.53.18 1643 ms
仓颉 O2优化 0.53.18 1638 ms
仓颉 Oz优化 0.53.18 1624 ms

总结

整体而言,Golang相对比较高效,仓颉仍需努力

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐