При добавлении к профилированию [][]string
показано, что приложение использует около 145 МБ памяти.
defer profile.Start(profile.MemProfile).Stop()
f, _ := os.Open("test.csv") // 100 MiB File
r := csv.NewReader(f)
var records [][]string
for {
values, err := r.Read()
if err == io.EOF {
break
}
records = append(records, values)
}
При хранении фрагмента в структуре и добавлении, что приложение использует около 260 МБ памяти.
defer profile.Start(profile.MemProfile).Stop()
type record struct {
values []string
}
f, _ := os.Open("test.csv") // 100 MiB File
r := csv.NewReader(f)
var records []record
for {
values, err := r.Read()
if err == io.EOF {
break
}
r := record{values: values}
records = append(records, r)
}
Такое ощущение, что он использует двойную память во втором примере.Может кто-нибудь объяснить, почему во втором примере используется больше памяти?