2014-01-09 105 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