最近需要分析网络流量通过网关的网络连接数,读取系统文件/proc/net/nf_conntrack, 提取protocol, src, dst, dport,然后统计这些数据的条数,打印出最高的20条,大概的代码如下: ```go type Entity struct{ Protocol string Src string Dst string Dport string } mapIPinfo := make(map[Entity]int) f, err := os.Open(filename) reader, err := bufio.NewReader(f) for(reader.Scan()){ var entity Entity line := reader.Text() ... //这里对line提取protocol, src, dst, dport放到entity mapIPinfo[entity]++ } ``` 将protocol, src, dst, dport 放到到一个结构体里, 然后将结构体放到一个map中以进行统计和去重。 这样运行后总共要花的时间超过15分钟, 太慢了。 然后我将读取每行改成读取多行,然后放到一个sync.Pool中,使用一个goroutine去提取, 同样也要花8分钟, 也太慢了。 感觉最后对map排序花的时间比较多。 请问大家有没有更好的方法和建议, 谢谢。