求教 os.readfile 内存溢出的问题

2022-11-29 20:53:09 +08:00
 sealinfree

求教一个内存溢出的问题 pprof 显示在 os.readfile 上有大量内存占用无法释放 请问我下面的写法具体哪里有问题 已经尝试很多办法,都没效果 恳请赐教

var GMap=map[string]string

func DomainMapLoadFromFile() {
	GMap=make(map[string]string,10)
	//尝试解决内存溢出
	fileStr := ReadAll("DataMap", "CacheMap")
	contentStrArr := strings.Split(*fileStr, "\n")
	contentLen := len(contentStrArr)
	contentArr := make([]string, contentLen)
	copy(contentArr, contentStrArr)
	var wg sync.WaitGroup
	wg.Add(contentLen)
	for i := range contentArr {
		go func(content string) {
			infoArr := strings.Split(content, "|")
			var deviceId int64
			l := len(infoArr)
			if l == 2 {
				data1 = infoArr[0]
				data2 = infoArr[1]
			} else {
				fmt.Println("不符合长度 5-6 的数据,content:" + content)
				wg.Done()
				return
			}
			GMap[data1]=data2
			wg.Done()
		}(contentArr[i])
	}
	wg.Wait()
}

func ReadAll(fileName, dirName string) *string {
	content, _ := os.ReadFile(GetFilePathPWD(fileName, dirName))
	contentStr := string(content)
	return &contentStr
}
1590 次点击
所在节点    Go 编程语言
24 条回复
sealinfree
2022-12-01 21:49:39 +08:00
@darknoll 更正 var GMap=map[string]string{}
sealinfree
2022-12-01 21:50:13 +08:00
@macscsbf 存的都是值,没有使用指针
macscsbf
2022-12-02 08:45:56 +08:00
@sealinfree data1 和 data2 都是 content 的子串,本质就是指针指向了 content
sealinfree
2022-12-02 15:21:26 +08:00
@macscsbf 哦,此处应该用 strings.clone 复制一份

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/898889

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX