- 分享
- 0
- 人气
- 0
- 主题
- 7
- 帖子
- 4707
- UID
- 82675
- 积分
- 5108
- 阅读权限
- 22
- 注册时间
- 2007-6-18
- 最后登录
- 2021-7-27
- 在线时间
- 5767 小时
|
作者 : Super-Tomato
昨天看到了篇帖子寫到 Firefox 記憶體溢出的問題, 所以今天周末有空就來分享如何優化記憶體分配的編程
一開始未看到這篇文章前, 應該很多人都認為這是個很複雜的技術, 但看完之後會偷笑原來這是那麼簡單就可以實現的
沒錯, 在早期要優化記憶體這種技術應該很複雜也輪不到我這種菜鳥來寫, 但 Windows 已經把這項工程給簡化了,
所以我們只要輕鬆的套用 WINAPI 就能夠解決這個問題.
那麼到底要用哪些 WINAPI 呢??
最主要的當然就是使用 EmptyWorkingSet 回收記憶體了, 這一個函數可以大大改善記憶體的使用, 至於說明就請搜索微軟的 WINAPI 吧
p/s: 但是要記得的是縮小了記憶體並非代表程式的執行速度加快了
以下是以 BCB 針對 Firefox 做為範例和演示
- //---------------------------------------------------------------------------
- #include <vcl.h>
- #include <psapi.h>
- #pragma comment(lib, "psapi.lib")
- #pragma hdrstop
- #include "Unit1.h"
- //---------------------------------------------------------------------------
- #pragma package(smart_init)
- #pragma resource "*.dfm"
- TForm1 *Form1;
- //---------------------------------------------------------------------------
- __fastcall TForm1::TForm1(TComponent* Owner)
- : TForm(Owner)
- {
- }
- //---------------------------------------------------------------------------
- void __fastcall TForm1::Timer1Timer(TObject *Sender)
- {
- HWND firefox = FindWindow("MozillaUIWindowClass", NULL);
- if(firefox)
- {
- DWORD dProcessID;
- HANDLE hProcess;
- GetWindowThreadProcessId(firefox, &dProcessID);
- if(dProcessID)
- {
- hProcess = OpenProcess(PROCESS_ALL_ACCESS, true, dProcessID);
- if(hProcess)
- {
- SetProcessWorkingSetSize(hProcess, 0, 0);
- EmptyWorkingSet(hProcess);
- CloseHandle(hProcess);
- }
- }
- }
- }
- //---------------------------------------------------------------------------
复制代码
演示(非永久性連結)
[ 本帖最后由 Super-Tomato 于 2008-11-8 01:09 PM 编辑 ] |
-
总评分: 积分 + 5
查看全部评分
|