我剛剛嘗試優化一些代碼,所以事情有點快,只是想解釋我發現的內容。計算部分大陣列與複製塊和計算
代碼只是計算特定窗口的值。因此,我們通過查看原始數組中的值來計算此代碼段
當用戶選擇完成計算的窗口時,會設置開始時間和結束時間。計算然後查看那些時間之間的原始數據數組並進行計算。快速注意,數據字典內的數組非常大。
Dim Calc As Dictionary(Of String, Double) = New Dictionary(Of String, Double)
Dim data As Dictionary(Of String, Double()) = New Dictionary(Of String, Double())
Dim total As Double = 0
For r = starttime To endtime
total = total + Math.Pow(data(key)(r), 2)
Next
Calc.Add(key, Math.Sqrt(total/length))
然後有這種方法,一次做約50次的計算,結果幾乎快了100ms。在這裏copys那些特定的時間到另一個陣列的塊,然後做計算
Dim temp(length) As Double
Array.Copy(data(key), starttime, temp, 0, starttime-endtime)
Calc.Add(val, Func(temp))
Private Function Func(arr As Double()) As Double
Dim total As Double = 0
For Each value In arr
total = total + Math.Pow(value, 2)
Next
Return Math.Sqrt(total/arr.Length)
End Function
我認爲,從複製數組中的添加時間會導致它落後?我仍然在努力使這個更有效,所以任何進一步的建議,將不勝感激:)
編輯:做了一些研究發現,與
val*val
更換
Math.Pow(val,2)
再敲100ms。 :)
你是什麼意思調整它們?我不相信我正在調整任何陣列的大小? – 2015-02-09 14:53:56
對不起,我誤解了代碼。我認爲我們需要更多的cotext來幫助改進它。但是,改善工作代碼通常屬於http://codereview.stackexchange.com – 2015-02-09 14:55:31
感謝WIll試一試。我只是很好奇爲什麼方法第一要花費超過2。 增加了一點更多的解釋 – 2015-02-09 15:01:02