【问题标题】:How to speed up this code如何加快此代码
【发布时间】:2014-01-09 12:05:43
【问题描述】:

我从事内存编辑器已经有一段时间了。它的关键方面之一是在内存中查找与搜索词匹配的值。然而,这非常缓慢。代码如下:

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 次,因此不会占用大量时间(它是一个小数组)。谢谢!

【问题讨论】:

  • 哇,我什至没听说过 codereview。尽管查看 codereviews 定义,但似乎这仍然是我的问题的正确位置,因为我正在寻求有关如何更改某些内容的具体帮助。没有完全审查我的代码。你同意吗?
  • 你肯定可以通过使用指针和unsafe 代码获得巨大的改进,但不幸的是,这在 VB.NET 中是不可能的。
  • 是的,我同意。这就是为什么我删除了我的近距离投票和评论。
  • 我不确定在 C# 中是否可行,但我实际上在 1 或 2 天内从 vb.net 学习了 C#,这是相同的逻辑。如果这是问题,请不要停止。如果你所有的代码都在 vb 中,没问题只需在 c# 中创建一个 dll 并导入这个子
  • @bto.rdz:你确实看到了:-),不是吗?这是个笑话。 :-D

标签: vb.net optimization


【解决方案1】:

有助于提高速度的一件事是,不要创建临时数组,只需将起始索引传递给 BitConverter.ToSingle

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

tempint = BitConverter.ToSingle(alldata, i)

如果您在最后一位中搜索的 0 位于末尾,则模运算符 Mod 可能比将 i 转换为字符串并搜索字符串效果更好

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

【讨论】:

  • 这会只占用 alldata 数组的 4 个字节吗?
  • 我为你添加了另一个想法。
  • 我已经实施了这两个建议,现在快了大约 10 倍!非常感谢! :D
猜你喜欢
  • 2014-12-09
  • 2011-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多