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

Pie*_*tti 2 arrays performance go slice

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

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

Vol*_*ker 10

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

对诸如"因性能应该做/避免X"这样的问题有任何建议吗?在50%的案例中没用,在25%的案例中适得其反.

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

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

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

  • 另外,当底层内存用完时,追加超级sekretly加倍小数组的基础数组大小和大数组倍增约1.5倍,所以它不像它每次都调用realloc. (7认同)