第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會有你想問的

前往:重用地圖鍵時(shí)大量的內(nèi)存使用

前往:重用地圖鍵時(shí)大量的內(nèi)存使用

Go
瀟湘沐 2021-05-07 17:10:59
作為我的Go教程的一部分,我正在編寫簡單的程序來計(jì)算多個(gè)文件中的單詞。我有一些go例程,用于處理文件和創(chuàng)建map[string]int告訴已發(fā)現(xiàn)特定單詞的次數(shù)。然后將映射發(fā)送到約簡例程,該例程將值聚合到單個(gè)映射中。聽起來很簡單,看起來像Go的完美任務(wù)(減少地圖操作)!我大約有1萬個(gè)文檔,其中包含160萬個(gè)唯一單詞。我發(fā)現(xiàn)我的內(nèi)存使用量在運(yùn)行代碼時(shí)快速且持續(xù)地增長,而我的內(nèi)存用完了大約一半的處理時(shí)間(12GB盒裝,7GB可用空間)。所以是的,它為這個(gè)小數(shù)據(jù)集使用了千兆字節(jié)!試圖找出問題出在哪里,我發(fā)現(xiàn)歸咎于reduceer收集和匯總數(shù)據(jù)。代碼如下:func reduceWords (input chan map[string]int, output chan int) {  total := make(map[string]int)  for wordMap := range input {    for w, c := range wordMap {      total[w] += c    }  }        output <- len(total)}如果我從樣本上方刪除地圖,則內(nèi)存將保持在合理的范圍內(nèi)(幾百兆字節(jié))。不過,我發(fā)現(xiàn)對字符串進(jìn)行復(fù)制也可以解決問題,即以下示例不會占用我的內(nèi)存:func reduceWords (input chan map[string]int, output chan int) {  total := make(map[string]int)  for wordMap := range input {    for w, c := range wordMap {      copyW := make([]byte, len(w)) // <-- will put a copy here!      copy(copyW, w)      total[string(copyW)] += c    }  }    output <- len(total)}wordMap當(dāng)我直接使用該值時(shí),是否有可能是實(shí)例在每次迭代后都沒有被破壞?(作為C ++程序員,在使用GC時(shí)我的直覺很有限。)這是否值得期待?難道我做錯(cuò)了什么?我應(yīng)該對Go還是對自己感到失望?
查看完整描述

1 回答

?
胡說叔叔

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超8個(gè)贊

您的代碼看起來像什么,將文件轉(zhuǎn)換為字符串?我在那里找問題。如果要將大塊(可能是整個(gè)文件?)轉(zhuǎn)換為字符串,然后將其切成單詞,那么如果保存任何一個(gè)單詞,則將固定整個(gè)塊。嘗試將塊保留為[] byte,將其切成單詞,然后將單詞分別轉(zhuǎn)換為字符串類型。


查看完整回答
反對 回復(fù) 2021-05-10
  • 1 回答
  • 0 關(guān)注
  • 213 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號