none
ReadProcessMemory效能問題 RRS feed

  • 問題

  • 從1600000讀取至18000000 花了32秒多 請問有什麼方法 可以提升效能呢

    Dim t1, t2 As DateTime

            Dim t3 As TimeSpan
            Dim aa As Integer = &H16000000
            Dim bb As Integer
            t1 = DateTime.Now

            For i As Integer = 0 To 18000000
                ReadMemoryLong(hProcess, aa, bb, 4, 0)
                If bb = 111111 Then
                    myArrayList.Add((aa))
                End If
                aa += &H4
            Next
            t2 = DateTime.Now
            t3 = t2 - t1

            MsgBox(t3.TotalSeconds)


    2017年4月20日 下午 02:33

解答

  • .NET程式呼叫Windows系統的功能本來就會影響效能, 建議寫個C函式將ReadProcessMemory功能寫好, 由VB.NET程式做一次性呼叫取回結果, 不要放在迴圈裏做多次呼叫, 以改善執行效率
    • 已標示為解答 有夢最美 2017年4月21日 下午 02:27
    2017年4月21日 上午 01:30

所有回覆

  • Add 本身會比較慢。

    你 aa 是定值,你要算次數還是要幹嘛?把邏輯釐清重新規劃演算法會比較好。


    不精確的問法,就會得到隨便猜的答案;自己都不肯花時間好好描述問題,又何必期望網友會認真回答?

    2017年4月20日 下午 03:37
  • .NET程式呼叫Windows系統的功能本來就會影響效能, 建議寫個C函式將ReadProcessMemory功能寫好, 由VB.NET程式做一次性呼叫取回結果, 不要放在迴圈裏做多次呼叫, 以改善執行效率
    • 已標示為解答 有夢最美 2017年4月21日 下午 02:27
    2017年4月21日 上午 01:30
  • 謝謝大大解答 

    目前使用了Declare Function VirtualQueryEx Lib "kernel32" (ByVal hProcess As Integer, ByVal lpAddress As Integer, ByRef lpBuffer As MEMORY_BASIC_INFORMATION, ByVal dwLength As Integer) As Integer

    時間大大縮短至 0.2秒

    2017年4月21日 下午 02:55