亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? fastmmusagetracker.pas

?? 高效的內存管理開源項目,完全取代BorladMM的內存管理
?? PAS
字號:
unit FastMMUsageTracker;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, Grids, Buttons, FastMM4;

type
  TfFastMMUsageTracker = class(TForm)
    gbMemoryMap: TGroupBox;
    gbBlockStats: TGroupBox;
    tTimer: TTimer;
    sgBlockStatistics: TStringGrid;
    dgMemoryMap: TDrawGrid;
    bClose: TBitBtn;
    Label1: TLabel;
    eAddress: TEdit;
    Label2: TLabel;
    eState: TEdit;
    GroupBox1: TGroupBox;
    Label3: TLabel;
    eTotalAddressSpaceInUse: TEdit;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure tTimerTimer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure bCloseClick(Sender: TObject);
    procedure dgMemoryMapDrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    procedure dgMemoryMapSelectCell(Sender: TObject; ACol, ARow: Integer;
      var CanSelect: Boolean);
  private
    {The current state}
    FMemoryManagerState: TMemoryManagerState;
    FMemoryMap: TMemoryMap;
  public
    {Refreshes the display}
    procedure RefreshSnapShot;
  end;

function ShowFastMMUsageTracker: TfFastMMUsageTracker;

{Gets the number of bytes of virtual memory either reserved or committed by this
 process}
function GetAddressSpaceUsed: Cardinal;

implementation

{$R *.dfm}

function ShowFastMMUsageTracker: TfFastMMUsageTracker;
begin
  Application.CreateForm(TfFastMMUsageTracker, Result);
  Result.RefreshSnapShot;
  Result.Show;
end;

function GetAddressSpaceUsed: Cardinal;
var
  LMemoryStatus: TMemoryStatus;
begin
  {Set the structure size}
  LMemoryStatus.dwLength := SizeOf(LMemoryStatus);
  {Get the memory status}
  GlobalMemoryStatus(LMemoryStatus);
  {The result is the total address space less the free address space}
  Result := (LMemoryStatus.dwTotalVirtual - LMemoryStatus.dwAvailVirtual) shr 10;
end;

{ TfUsageTracker }

procedure TfFastMMUsageTracker.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  Action := caFree;
end;

procedure TfFastMMUsageTracker.RefreshSnapShot;
var
  LInd: integer;
  LAllocatedSize, LTotalBlocks, LTotalAllocated, LTotalReserved: Cardinal;
begin
  {Get the state}
  GetMemoryManagerState(FMemoryManagerState);
  GetMemoryMap(FMemoryMap);
  dgMemoryMap.Invalidate;
  {Set the texts inside the results string grid}
  LTotalBlocks := 0;
  LTotalAllocated := 0;
  LTotalReserved := 0;
  for LInd := 0 to high(FMemoryManagerState.SmallBlockTypeStates) do
  begin
    with FMemoryManagerState.SmallBlockTypeStates[LInd] do
    begin
      sgBlockStatistics.Cells[1, LInd + 1] := IntToStr(AllocatedBlockCount);
      Inc(LTotalBlocks, AllocatedBlockCount);
      LAllocatedSize := AllocatedBlockCount * UseableBlockSize;
      sgBlockStatistics.Cells[2, LInd + 1] := IntToStr(LAllocatedSize);
      Inc(LTotalAllocated, LAllocatedSize);
      sgBlockStatistics.Cells[3, LInd + 1] := IntToStr(ReservedAddressSpace);
      Inc(LTotalReserved, ReservedAddressSpace);
      if ReservedAddressSpace > 0 then
        sgBlockStatistics.Cells[4, LInd + 1] := FormatFloat('0.##%', LAllocatedSize/ReservedAddressSpace * 100)
      else
        sgBlockStatistics.Cells[4, LInd + 1] := 'N/A';
    end;
  end;
  {Medium blocks}
  LInd := length(FMemoryManagerState.SmallBlockTypeStates) + 1;
  sgBlockStatistics.Cells[1, LInd] := IntToStr(FMemoryManagerState.AllocatedMediumBlockCount);
  Inc(LTotalBlocks, FMemoryManagerState.AllocatedMediumBlockCount);
  sgBlockStatistics.Cells[2, LInd] := IntToStr(FMemoryManagerState.TotalAllocatedMediumBlockSize);
  Inc(LTotalAllocated, FMemoryManagerState.TotalAllocatedMediumBlockSize);
  sgBlockStatistics.Cells[3, LInd] := IntToStr(FMemoryManagerState.ReservedMediumBlockAddressSpace);
  Inc(LTotalReserved, FMemoryManagerState.ReservedMediumBlockAddressSpace);
  if FMemoryManagerState.ReservedMediumBlockAddressSpace > 0 then
    sgBlockStatistics.Cells[4, LInd] := FormatFloat('0.##%', FMemoryManagerState.TotalAllocatedMediumBlockSize/FMemoryManagerState.ReservedMediumBlockAddressSpace * 100)
  else
    sgBlockStatistics.Cells[4, LInd] := 'N/A';
  {Large blocks}
  LInd := length(FMemoryManagerState.SmallBlockTypeStates) + 2;
  sgBlockStatistics.Cells[1, LInd] := IntToStr(FMemoryManagerState.AllocatedLargeBlockCount);
  Inc(LTotalBlocks, FMemoryManagerState.AllocatedLargeBlockCount);
  sgBlockStatistics.Cells[2, LInd] := IntToStr(FMemoryManagerState.TotalAllocatedLargeBlockSize);
  Inc(LTotalAllocated, FMemoryManagerState.TotalAllocatedLargeBlockSize);
  sgBlockStatistics.Cells[3, LInd] := IntToStr(FMemoryManagerState.ReservedLargeBlockAddressSpace);
  Inc(LTotalReserved, FMemoryManagerState.ReservedLargeBlockAddressSpace);
  if FMemoryManagerState.ReservedLargeBlockAddressSpace > 0 then
    sgBlockStatistics.Cells[4, LInd] := FormatFloat('0.##%', FMemoryManagerState.TotalAllocatedLargeBlockSize/FMemoryManagerState.ReservedLargeBlockAddressSpace * 100)
  else
    sgBlockStatistics.Cells[4, LInd] := 'N/A';
  {Overall}
  LInd := length(FMemoryManagerState.SmallBlockTypeStates) + 3;
  sgBlockStatistics.Cells[1, LInd] := IntToStr(LTotalBlocks);
  sgBlockStatistics.Cells[2, LInd] := IntToStr(LTotalAllocated);
  sgBlockStatistics.Cells[3, LInd] := IntToStr(LTotalReserved);
  if LTotalReserved > 0 then
    sgBlockStatistics.Cells[4, LInd] := FormatFloat('0.##%', LTotalAllocated/LTotalReserved * 100)
  else
    sgBlockStatistics.Cells[4, LInd] := 'N/A';
  {Address space usage}
  eTotalAddressSpaceInUse.Text := FormatFloat('0.###', GetAddressSpaceUsed / 1024);
end;

procedure TfFastMMUsageTracker.tTimerTimer(Sender: TObject);
begin
  tTimer.Enabled := False;
  try
    RefreshSnapShot;
  finally
    tTimer.Enabled := True;
  end;
end;

procedure TfFastMMUsageTracker.FormCreate(Sender: TObject);
var
  LInd: integer;
begin
  {Set up the row count}
  sgBlockStatistics.RowCount := length(FMemoryManagerState.SmallBlockTypeStates) + 4;
  {Get the initial snapshot}
  RefreshSnapShot;
  {Set up the StringGrid columns}
  sgBlockStatistics.Cells[0, 0] := 'Block Size';
  sgBlockStatistics.Cells[1, 0] := '# Live Pointers';
  sgBlockStatistics.Cells[2, 0] := 'Live Size';
  sgBlockStatistics.Cells[3, 0] := 'Used Space';
  sgBlockStatistics.Cells[4, 0] := 'Efficiency';
  for LInd := 0 to high(FMemoryManagerState.SmallBlockTypeStates) do
  begin
    sgBlockStatistics.Cells[0, LInd + 1] :=
      IntToStr(FMemoryManagerState.SmallBlockTypeStates[LInd].InternalBlockSize)
      + '(' + IntToStr(FMemoryManagerState.SmallBlockTypeStates[LInd].UseableBlockSize) + ')';
  end;
  sgBlockStatistics.Cells[0, length(FMemoryManagerState.SmallBlockTypeStates) + 1] := 'Medium Blocks';
  sgBlockStatistics.Cells[0, length(FMemoryManagerState.SmallBlockTypeStates) + 2] := 'Large Blocks';
  sgBlockStatistics.Cells[0, length(FMemoryManagerState.SmallBlockTypeStates) + 3] := 'Overall';
end;

procedure TfFastMMUsageTracker.bCloseClick(Sender: TObject);
begin
  Close;
end;

procedure TfFastMMUsageTracker.dgMemoryMapDrawCell(Sender: TObject; ACol,
  ARow: Integer; Rect: TRect; State: TGridDrawState);
var
  LChunkIndex: integer;
  LChunkColour: TColor;
begin
  {Get the chunk index}
  LChunkIndex := ARow * dgMemoryMap.ColCount + ACol;
  {Get the correct colour}
  case FMemoryMap[LChunkIndex] of
    csAllocated:
    begin
      LChunkColour := $9090ff;
    end;
    csReserved:
    begin
      LChunkColour := $90f090;
    end;
    csSysAllocated:
    begin
      LChunkColour := $707070;
    end;
    csSysReserved:
    begin
      LChunkColour := $c0c0c0;
    end
  else
    begin
      {Unallocated}
      LChunkColour := $ffffff;
    end;
  end;
  {Draw the chunk background}
  dgMemoryMap.Canvas.Brush.Color := LChunkColour;
  if State = [] then
  begin
    dgMemoryMap.Canvas.FillRect(Rect);
  end
  else
  begin
    dgMemoryMap.Canvas.Rectangle(Rect);
  end;
end;

procedure TfFastMMUsageTracker.dgMemoryMapSelectCell(Sender: TObject; ACol,
  ARow: Integer; var CanSelect: Boolean);
var
  LChunkIndex: Cardinal;
begin
  LChunkIndex := ARow * dgMemoryMap.ColCount + ACol;
  eAddress.Text := Format('$%0.8x', [LChunkIndex shl 16]);
  case FMemoryMap[LChunkIndex] of
    csAllocated:
    begin
      eState.Text := 'FastMM Allocated';
    end;
    csReserved:
    begin
      eState.Text := 'FastMM Reserved';
    end;
    csSysAllocated:
    begin
      eState.Text := 'System Allocated';
    end;
    csSysReserved:
    begin
      eState.Text := 'System Reserved';
    end
  else
    begin
      {Unallocated}
      eState.Text := 'Unallocated';
    end;
  end;
end;

end.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩一区二区免费在线电影| 亚洲国产欧美日韩另类综合| 亚洲三级在线看| 肉色丝袜一区二区| 国产美女精品一区二区三区| 欧美午夜电影一区| 国产精品―色哟哟| 久久超级碰视频| 欧美高清你懂得| 亚洲伦在线观看| 成人美女在线观看| 欧美mv和日韩mv的网站| 亚洲成人一区在线| 92精品国产成人观看免费 | 中文字幕一区二| 激情图片小说一区| 欧美亚洲高清一区二区三区不卡| 欧美国产欧美综合| 狠狠v欧美v日韩v亚洲ⅴ| 欧美三区免费完整视频在线观看| 国产精品色婷婷| 国产伦精品一区二区三区在线观看| 欧美日韩在线免费视频| 最新国产の精品合集bt伙计| 国产成人精品三级| 久久久777精品电影网影网| 久久精品国产**网站演员| 欧美性淫爽ww久久久久无| 亚洲欧洲精品一区二区精品久久久| 韩日欧美一区二区三区| 精品日韩av一区二区| 午夜精品久久久久久久99水蜜桃| 91偷拍与自偷拍精品| 中文字幕一区二区三区四区| 国产成人啪免费观看软件| 久久综合九色综合久久久精品综合 | av不卡免费在线观看| 国产精品少妇自拍| 91一区一区三区| 一区二区国产视频| 欧美日本一道本在线视频| 五月激情综合婷婷| 91麻豆精品久久久久蜜臀| 青青草伊人久久| 日韩免费看的电影| 国产精品99久久久久久久vr| 国产精品污www在线观看| 99久久精品国产麻豆演员表| 亚洲女与黑人做爰| 欧美色倩网站大全免费| 午夜激情一区二区三区| 日韩欧美一区二区视频| 国产一区不卡在线| 中文字幕精品一区二区精品绿巨人| a在线播放不卡| 亚洲成在人线免费| 欧美大片在线观看| 99麻豆久久久国产精品免费 | 欧美色大人视频| 久久超碰97中文字幕| 亚洲欧美日韩国产综合| 欧美色倩网站大全免费| 国产综合色产在线精品| 亚洲精品菠萝久久久久久久| 欧美一区日本一区韩国一区| 国产成人无遮挡在线视频| 亚洲免费在线看| 日韩一卡二卡三卡| 9久草视频在线视频精品| 亚洲综合视频在线观看| 精品国产91久久久久久久妲己| 成人听书哪个软件好| 午夜精品福利一区二区蜜股av | 亚洲一级二级三级在线免费观看| 欧美精品vⅰdeose4hd| 国产精品资源网| 婷婷综合久久一区二区三区| 欧美高清在线一区| 欧美精品一卡二卡| 成人av电影在线观看| 日韩精品国产欧美| 亚洲免费观看视频| 精品88久久久久88久久久| 日本韩国一区二区三区| 国产成人精品免费网站| 丝袜亚洲另类欧美| 亚洲欧美偷拍另类a∨色屁股| 欧美www视频| 欧美三级日韩三级国产三级| 成人av动漫网站| 国产一区二区按摩在线观看| 午夜激情一区二区| 一区二区在线免费| 国产精品美女久久久久高潮| 26uuu亚洲综合色欧美| 欧美高清精品3d| 欧美性猛交xxxx乱大交退制版| 不卡的av中国片| 国产福利91精品一区| 久久精品国产精品亚洲精品| 性久久久久久久久| 亚洲欧美激情一区二区| 国产精品久久久久久久久免费丝袜| 精品日本一线二线三线不卡| 欧美精品精品一区| 欧美日韩一本到| 在线看国产一区| 91成人在线免费观看| 色综合色综合色综合| a亚洲天堂av| 97久久精品人人爽人人爽蜜臀| 国产成人欧美日韩在线电影| 极品少妇xxxx精品少妇| 麻豆精品一区二区三区| 精品在线免费视频| 麻豆91免费看| 免费高清在线视频一区·| 日本成人在线视频网站| 日韩av一区二区在线影视| 视频一区免费在线观看| 日本不卡视频在线| 日产欧产美韩系列久久99| 日韩vs国产vs欧美| 久久国内精品自在自线400部| 日韩国产精品91| 免费av成人在线| 国产精品中文欧美| 高清不卡在线观看| a4yy欧美一区二区三区| 91国偷自产一区二区三区观看 | 一本久道久久综合中文字幕| 色悠久久久久综合欧美99| 欧美色图天堂网| 欧美久久一区二区| 久久综合色天天久久综合图片| 中文字幕高清一区| 亚洲精品成人a在线观看| 日韩中文字幕区一区有砖一区 | 成人18视频日本| 日本道色综合久久| 欧美巨大另类极品videosbest | 亚洲乱码国产乱码精品精98午夜 | 一区二区在线观看视频| 亚洲高清视频在线| 精品一二三四区| 97超碰欧美中文字幕| 欧美日韩一级二级| 国产日韩亚洲欧美综合| 有码一区二区三区| 精品一区二区免费在线观看| 99久久精品国产精品久久| 欧美日韩国产成人在线免费| 久久在线观看免费| 亚洲日本一区二区| 老司机精品视频一区二区三区| 粉嫩一区二区三区性色av| 欧美日韩一卡二卡三卡| 国产欧美综合在线观看第十页| 一区二区日韩电影| 国产一区二区在线观看免费| www.日韩av| 精品日韩欧美在线| 亚洲一区二区三区在线| 国产成人精品免费在线| 欧美丰满嫩嫩电影| 中文字幕亚洲在| 国产在线精品一区二区夜色 | 久久精品国产亚洲5555| 成人app在线| 久久午夜色播影院免费高清| 天天综合日日夜夜精品| 高清shemale亚洲人妖| 91精品国产一区二区人妖| 亚洲人123区| 风间由美性色一区二区三区| 日韩一区二区三区在线视频| 亚洲一区二区在线播放相泽| 成人久久久精品乱码一区二区三区| 91精品国产综合久久福利 | 国产精品美女久久福利网站| 美女国产一区二区三区| 91激情五月电影| 国产精品久久久久影院亚瑟| 国产一区二区美女| 日韩欧美一级片| 青青草国产成人av片免费| 欧美午夜精品一区二区三区 | 欧美日本在线看| 亚洲综合精品自拍| 99re在线视频这里只有精品| 国产精品丝袜在线| 国产精品性做久久久久久| 久久日韩精品一区二区五区| 免费成人在线播放| 日韩欧美不卡在线观看视频| 麻豆国产91在线播放| 欧美一区二区三区视频免费 | 91美女在线视频| 一区在线观看视频| 成人免费视频播放|