我是否必须避免追求表现?

时间:2014-04-29 08:14:47

标签: arrays performance go slice

我是Golang的新手 我应该总是避免append切片吗?

我需要在内存中加载一个以换行符分隔的数据文件。 考虑到性能,我应该计算行数,然后将所有数据加载到预定义的长度数组中,还是只需将行附加到切片上?

1 个答案:

答案 0 :(得分:10)

您应该停止考虑性能并开始衡量应用程序的实际瓶颈。

对问题的任何建议,例如"由于性能,应该做/避免X?"在50%的案件中没用,而在25%的案件中适得其反。

有一些非常普遍的建议,比如"不要不必要地生成垃圾"但是你的问题无法回答,因为这很大程度上取决于文件的大小:

  • 您的文件是〜3 Tera字节?最有可能你不得不逐行阅读......
  • 您的文件只有一堆(~50)行:可能首先计算行数比重新分配[]string切片4次(或最初为make([]string,0,100)的0倍)更多的工作。 string只有2个字。
  • 您的文件有一个未知但很大(> 10k)的行:也许它可能值得。 "也许"从某种意义上说,你应该测量真实数据。
  • 您的文件已知很大(> 500k行):首先明确计算,但您可能会从第一个项目符号点开始解决问题。

你看:对性能的一般建议是一个糟糕的建议,所以我不会给你一个。