亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

如何初始化測試數據,以便在高浪進行基準測試?

如何初始化測試數據,以便在高浪進行基準測試?

Go
偶然的你 2022-09-12 20:47:45
當我為我的算法編寫基準測試時,我被一個問題弄糊涂了!我的測試代碼詳細信息被推送到github,我將其復制到此處并添加一些注釋。https://github.com/hidstarshine/Algorithm/blob/master/leet/problem24_test.govar TDBenchmarkSwapPairs1 *leet.ListNode// This function may be not good, it should be init()?func FTDBenchmarkSwapPairs1() {    TDBenchmarkSwapPairs1 = &leet.ListNode{        Val:  0,        Next: nil,    }    changeNode := TDBenchmarkSwapPairs1    for i := 1; i < 100; i++ {        changeNode.Next = &leet.ListNode{            Val:  i,            Next: nil,        }        changeNode = changeNode.Next    }}func BenchmarkSwapPairs1(b *testing.B) {    FTDBenchmarkSwapPairs1() // problem is here    for i := 0; i < b.N; i++ {        leet.SwapPairs1(TDBenchmarkSwapPairs1)    }}在問題行中,我調用 FTD 模板標記交換對1(FTD 均值填充測試數據)來初始化數據。然后發生了一些令人不安的事情,基準交換對1似乎在許多戈魯廷中運行。因此,并發性帶來了數據競爭,并且由于SwapAirs1的特殊邏輯,調試陷入了混亂。交換對1將更改列表節點中的下一個。然后我想將基準測試交換對1移動到 的塊中以解決此問題。但是數據競賽似乎仍未解決,并且由于初始化時間的原因,基準測試毫無意義。我判斷關于李碼的阿戈里特姆并被接受!問:我該如何優雅地解決這個問題?需要一個好主意!
查看完整描述

1 回答

?
智慧大石

TA貢獻1946條經驗 獲得超3個贊

如果您有多個基準測試函數,則可能不希望它們干擾彼此的數據,因此請使用局部變量而不是(共享)包級變量。


您可以使用 *B.Reset 計時器從總體基準測試運行時間中刪除設置時間。


func BenchmarkSwapPairs1(b *testing.B) {

    root := &leet.ListNode{

        Val:  0,

        Next: nil,

    }

    changeNode := root

    for i := 1; i < 10000; i++ {

        changeNode.Next = &leet.ListNode{

            Val:  i,

            Next: nil,

        }

        changeNode = changeNode.Next

    }

    b.ResetTimer()


    for i := 0; i < b.N; i++ {

        root = leet.SwapPairs1(root)

    }

}



查看完整回答
反對 回復 2022-09-12
  • 1 回答
  • 0 關注
  • 110 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號