提交 4d20e7b0 编写于 作者: S Shirou WAKAYAMA

reduce memory alloc of append

上级 4899782e
......@@ -9,10 +9,11 @@ import (
)
func CPUTimes(percpu bool) ([]CPUTimesStat, error) {
var ret []CPUTimesStat
filename := "/proc/stat"
lines, _ := readLines(filename)
ret := make([]CPUTimesStat, 0, len(lines))
for _, line := range lines {
ct, err := parseStatLine(line)
if err != nil {
......
......@@ -17,7 +17,7 @@ func DiskPartitions(all bool) ([]DiskPartitionStat, error) {
return ret, err
}
fs := make([]Statfs, count)
fs := make([]Statfs, 0, count)
_, err = Getfsstat(fs, MNT_WAIT)
for _, stat := range fs {
......
......@@ -14,14 +14,15 @@ const (
// Get disk partitions.
// should use setmntent(3) but this implement use /etc/mtab file
func DiskPartitions(all bool) ([]DiskPartitionStat, error) {
var ret []DiskPartitionStat
filename := "/etc/mtab"
lines, err := readLines(filename)
if err != nil {
return ret, err
return nil, err
}
ret := make([]DiskPartitionStat, 0, len(lines))
for _, line := range lines {
fields := strings.Fields(line)
d := DiskPartitionStat{
......@@ -36,15 +37,13 @@ func DiskPartitions(all bool) ([]DiskPartitionStat, error) {
}
func DiskIOCounters() (map[string]DiskIOCountersStat, error) {
ret := make(map[string]DiskIOCountersStat, 0)
// determine partitions we want to look for
filename := "/proc/partitions"
lines, err := readLines(filename)
if err != nil {
return ret, err
return nil, err
}
var partitions []string
partitions := make([]string, 0, len(lines)-2)
for _, line := range lines[2:] {
fields := strings.Fields(line)
......@@ -64,8 +63,9 @@ func DiskIOCounters() (map[string]DiskIOCountersStat, error) {
filename = "/proc/diskstats"
lines, err = readLines(filename)
if err != nil {
return ret, err
return nil, err
}
ret := make(map[string]DiskIOCountersStat, 0)
for _, line := range lines {
fields := strings.Fields(line)
name := fields[2]
......
......@@ -33,22 +33,23 @@ func BootTime() (int64, error) {
func Users() ([]UserStat, error) {
utmpfile := "/var/run/utmp"
var ret []UserStat
file, err := os.Open(utmpfile)
if err != nil {
return ret, err
return nil, err
}
buf, err := ioutil.ReadAll(file)
if err != nil {
return ret, err
return nil, err
}
u := utmp{}
entrySize := int(unsafe.Sizeof(u))
count := len(buf) / entrySize
ret := make([]UserStat, 0, count)
for i := 0; i < count; i++ {
b := buf[i*entrySize : i*entrySize+entrySize]
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册