2014-01-09 101 views
1

我一直在努力一段時間的內存編輯器。其中一個關鍵方面是通過內存查找與搜索項匹配的值。然而,這非常緩慢。這裏的代碼:如何加快此代碼

For i = 0 To 1318706384 - 4 Step 4 

    For j = 0 To 3 
     temparry(j) = alldata(i + j) 
    Next 

    tempint = BitConverter.ToSingle(temparry, 0) 

    If tempint + 0.01 > xposs AndAlso tempint - 0.01 < xposs Then 
     ReDim Preserve xpos(xpos.GetLength(0)) 
     xpos(xpos.GetLength(0) - 1) = i 

    End If 

    If InStrRev(i.ToString, "000000") > 0 Then 
     Label1.Text = i/1318706384 * 100 
     Me.Update() 
    End If 
Next 

任何關於如何加快它的建議將是偉大的! xpos數組只能重複約50次,所以不會佔用大量的時間(這是一個小數組)。謝謝!

+0

更好哇,我甚至沒有聽說過codereview。雖然看codereviews定義,但它似乎仍然是我的問題的正確位置,因爲我要求如何改變某些具體幫助。沒有完全審查我的代碼。你同意嗎? – FraserOfSmeg

+0

通過使用指針和'unsafe'代碼,你絕對可以獲得巨大的改進,但不幸的是,在VB.NET中是不可能的。 – MarcinJuraszek

+0

是的,我同意。這就是爲什麼我刪除了我的近距離投票和評論。 – MarcinJuraszek

回答

1

有一件事應該有助於提高速度,而不是創建一個臨時數組只是將開始索引傳遞到BitConverter.ToSingle

'For j = 0 To 3 
    'temparry(j) = alldata(i + j) 
'Next 

tempint = BitConverter.ToSingle(alldata, i) 

如果0是你在最後一點搜索的末尾,則模運算符,Mod,或許應該工作比鑄造我爲字符串,並搜索字符串

If i Mod Math.Pow(10,5) = 0 Then 
+0

這隻需要4個字節的alldata數組? – FraserOfSmeg

+0

是的,它確實[BitConverter.ToSingle](http://msdn.microsoft.com/en-us/library/system.bitconverter.tosingle%28v=vs.110%29.aspx) – tinstaafl

+0

我給你添加了另一個想法。 – tinstaafl