dabian001 发表于 2007-7-16 14:48:24

[求助]请求帮助,,,为什么下面的代码运行起来很卡。。。帮我改改

<p>'<br/>Private Function 查找城市地址(hProcess As Long, bSearch() As Byte) As Long</p><p>Const PAGE_READWRITE = 4<br/>Const MEM_COMMIT = &amp;H1000<br/>Dim i As Long, j As Long<br/>Dim r As Long, mbi As MEMORY_BASIC_INFORMATION<br/>Dim lpAddress As Long<br/>Dim ubs As Long<br/>Dim add_city As Long<br/>Dim flg_27 As Long<br/>Dim nCount As Long</p><p>&nbsp;&nbsp;&nbsp; ubs = UBound(bSearch)<br/>&nbsp;&nbsp;&nbsp; lpAddress = &amp;H3F00000<br/>&nbsp;&nbsp;&nbsp; nCount = 0<br/>&nbsp;&nbsp;&nbsp; r = VirtualQueryEx(hProcess, lpAddress, mbi, Len(mbi))<br/>&nbsp;&nbsp;&nbsp; Do While (r And (lpAddress &lt; &amp;H7FFFFFFF))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DoEvents&nbsp;&nbsp;&nbsp; '[防止死机]<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If (mbi.Protect And PAGE_READWRITE) And (mbi.State = MEM_COMMIT) Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim lpBuffer() As Byte<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ReDim lpBuffer(mbi.RegionSize - 1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ReadProcessMemory hProcess, mbi.BaseAddress, lpBuffer(0), mbi.RegionSize, 0<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; For i = 0 To mbi.RegionSize - 1 - ubs<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DoEvents&nbsp;&nbsp;&nbsp; '[防止死机]<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; For j = 0 To ubs<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If bSearch(j) &lt;&gt; lpBuffer(i + j) Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GoTo 10<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Next<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; add_city = i + lpAddress<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ReadProcessMemory hProcess, add_city - 28, ByVal VarPtr(flg_27), 2, 0<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If flg_27 = 39 Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; nCount = nCount + 1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 查找城市地址 = add_city<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exit For<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>10:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Next<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If nCount &gt; 0 Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exit Do<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lpAddress = lpAddress + mbi.RegionSize<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; r = VirtualQueryEx(hProcess, lpAddress, mbi, Len(mbi))<br/>&nbsp;&nbsp;&nbsp; Loop<br/>&nbsp;&nbsp;&nbsp; CloseHandle hProcess<br/>&nbsp;&nbsp;&nbsp; 'If nCount = 0 Then<br/>&nbsp;&nbsp;&nbsp; 'Text1.Text = "有城市没有找到"<br/>&nbsp;&nbsp;&nbsp; 'End If</p><p><br/>End Function</p>

马大哈 发表于 2007-7-16 15:34:36

<p>那当然啊,你现在是对内存进行搜索</p><p>复制内存这个操作本身就非常耗资源了(你可以一次复制多点内存试一下,比如10M)</p><p>并且你是频繁地在复制</p><p>搜索过程,你可以参考一下这个代码:</p><p><a href="http://www.m5home.com/bbs/viewthread.php?tid=1344">http://www.m5home.com/bbs/viewthread.php?tid=1344</a></p>
页: [1]
查看完整版本: [求助]请求帮助,,,为什么下面的代码运行起来很卡。。。帮我改改