Go语言文本去重:如何优化75万行文本的去重效率?

go语言文本去重:如何优化75万行文本的去重效率?

Go语言文本去重性能优化

本文分析并优化一段Go语言代码,该代码用于处理75万行文本的去重任务,原始耗时17秒。优化目标是提升文本去重效率。

原始代码分析及问题:

原始代码使用map[string]bool存储去重结果,并通过字符串拼接累积结果字符串。这存在两个主要性能瓶颈:

立即学习“go语言免费学习笔记(深入)”;

字符串拼接效率低: result += fmt.Sprintf(…) 这种方式会不断创建新的字符串,导致频繁的内存分配和复制,效率低下。

map动态扩容: make(map[string]bool, 0) 未预分配map容量,随着数据增加,map会频繁扩容,造成性能损耗。

优化策略:

针对上述问题,我们采用以下优化策略:

使用strings.Builder: 将字符串拼接替换为strings.Builder,它提供更高效的字符串构建方式,避免了频繁的内存分配和复制。

预分配map容量: 初始化map时预分配一定容量,例如make(map[string]struct{}, 1000000),减少扩容次数。使用struct{}作为map值,可以节省内存,因为它不占用任何空间。

优化后的代码:

package distinctimport (    "bufio"    "fmt"    "io"    "os"    "strings")//distinctfile 为指定文件去重func distinctfile(file string, output string) {    f, err := os.Open(file)    if err != nil {        fmt.Println(err)        return    }    defer f.Close()    reader := bufio.NewReader(f)    set := make(map[string]struct{}, 1000000) // 预分配map容量    builder := strings.Builder{}              // 使用strings.Builder    for {        line, isPrefix, err := reader.ReadLine()        if err == io.EOF {            break        }        if err != nil {            fmt.Println(err)            return        }        if !isPrefix {            lineStr := string(line)            if _, ok := set[lineStr]; !ok {                builder.WriteString(lineStr)                builder.WriteString("")                set[lineStr] = struct{}{}            }        }    }    nf, err := os.Create(output)    if err != nil {        fmt.Println(err)        return    }    defer nf.Close()    _, err = io.Copy(nf, strings.NewReader(builder.String()))    if err != nil {        fmt.Println(err)    }}

登录后复制

测试代码 (保持不变):

package distinctimport "testing"func TestDistinctFile(t *testing.T) {    distinctfile("result.txt", "out.txt")}

登录后复制

通过以上优化,预计可以显著减少文本去重的时间消耗。 预分配的map大小可以根据实际文本行数进行调整,以达到最佳性能。 此外,考虑使用并发处理进一步提升效率也是一个可行的方向,但需要更复杂的代码设计。

以上就是Go语言文本去重:如何优化75万行文本的去重效率?的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2538360.html

(0)
上一篇 2025年3月6日 00:52:25
下一篇 2025年2月18日 07:15:30

AD推荐 黄金广告位招租... 更多推荐

相关推荐

发表回复

登录后才能评论