例如搜索筆記本中的“1” 從&H000000到&HFFFFFF 類似CE的搜索
ihWnd = FindWindow(vbNullString, "1 - 記事本")
GetWindowThreadProcessId ihWnd, iPid
hProcess = OpenProcess(PROCESS_ALL_ACCESS, False, iPid)
For i = "&H" & 0000000 To "&H" & FFFFFF
ReadProcessMemory hProcess, i, ByVal adrValue, 10, 0&
Next
但是vb找記事本內"1" 需要幾分鐘時間
而ce記憶體查看器從&H000000到&HFFFFFF只需要0.5秒 怎么辦
uj5u.com熱心網友回復:
一次性全部讀取到陣列中,然后再回圈查找。你這樣消耗了大量的函式呼叫開銷。
uj5u.com熱心網友回復:
對,你重復的在For回圈中呼叫ReadProcessMemory hProcess是花時間的。
uj5u.com熱心網友回復:
汗,這和VB快慢有啥關系,只是你讀記憶體的演算法問題罷了。你通過ReadProcessMemory 實作的話,一次讀個N兆位元組到陣列比較合適吧。uj5u.com熱心網友回復:
A)成塊讀取B)用 KMP 之類的演算法進行查找
uj5u.com熱心網友回復:
求例子??????uj5u.com熱心網友回復:
..........For i = "&H" & 0000000 To "&H" & FFFFFF
ReadProcessMemory hProcess, i, ByVal adrValue, 10, 0&
Next
一個程式的記憶體,100%的情況下都不會出現 i = "&H" & 0000000 To "&H" & FFFFFF
這個地址范圍內都被占用
程式占用的記憶體,是用堆的概念實作的
可以理解成一個樹形控制元件那樣的結構
行程就是頂級節點,次級節點是所有的記憶體堆
不同的記憶體堆存有不同意義的資料,有些是存盤代碼的,有些是存資源的還有些就是存用戶資料的
so。。。
你應該找一些任務管理器的代碼,列舉行程內所有記憶體堆,分析各個堆的意義
找那些可能存盤相應資料的記憶體范圍再搜,范圍小了,速度自然就上來了,不要先迷信所謂的演算法
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/142404.html
標籤:非技術類
下一篇:請幫忙解決VB中條件累加的代碼
