美文网首页
string 和byte.Buffer的巨大差别

string 和byte.Buffer的巨大差别

作者: luomoxyz | 来源:发表于2016-12-21 23:11 被阅读44次
    package main
    
    import (
        "bytes"
        "fmt"
        "time"
    )
    
    const num = 100000 * 5
    
    func testString() (t int64) {
        var s string
        start := time.Now().UnixNano()
        for i := 0; i < num; i++ {
            s += "a"
        }
        return time.Now().UnixNano() - start
    }
    func testBuf() (t int64) {
        var s bytes.Buffer
        start := time.Now().UnixNano()
        for i := 0; i < num; i++ {
            s.WriteString("a")
        }
        return time.Now().UnixNano() - start
    }
    func main() {
        fmt.Printf("string ----->%d ms\n", testString()/1e6)
        fmt.Printf("buffer ----->%d ms\n", testBuf()/1e6)
    }
    

    结果


    屏幕快照 2016-12-08 下午7.53.23.png

    可以看到差别巨大..
    分析原因如下:

    • string 不可变,每次运算都要分配新的内存把数据拷贝到新的内存中
    • byte.Buffer会有预分配, 要合适的时候才会扩大内存,并把原来的数据拷贝过去

    相关文章

      网友评论

          本文标题:string 和byte.Buffer的巨大差别

          本文链接:https://www.haomeiwen.com/subject/ocismttx.html