Clo*_*web 4 memory delphi memory-leaks
好吧,所以我对Delphi很陌生(正如你从我的代码中看到的那样 - 尽量不要笑得太厉害并且伤害自己),但我已经设法制作了一个小桌面画布颜色选择器.它有效,有点,这就是我在这里的原因:D
它似乎在泄漏.它使用大约2 MB的内存开始,每秒爬升大约2 kB,直到10分钟左右达到大约10 MB.在我的双核2.7 ghz cpu上,它使用5%到20%的CPU功率,波动.在没有停止计时器的情况下运行约10分钟后,我的计算机没有响应.
您可以在下面的源代码中看到我正在释放TBitmap(或尝试,不确定它是否正在执行它,似乎没有工作).
procedure TForm1.Timer1Timer(Sender: TObject);
begin
GetCursorPos(MousePos);
try
Canvas1 := TCanvas.Create;
Canvas1.Handle := GetDC(0);
Pxl := TBitmap.Create;
Pxl.Width := 106;
Pxl.Height := 106;
W := Pxl.Width;
H := Pxl.Height;
T := (W div 2);
L := (H div 2);
Zoom := 10;
Rect1 := Rect(MousePos.X - (W div Zoom), MousePos.Y - (H div Zoom), MousePos.X + (W div Zoom), MousePos.Y + (H div Zoom));
Rect2 := Rect(0, 0, H, W);
Pxl.Canvas.CopyRect(Rect2, Canvas1, Rect1);
Pxl.Canvas.Pen.Color := clRed;
Pxl.Canvas.MoveTo(T, 0);
Pxl.Canvas.LineTo(L, H);
Pxl.Canvas.MoveTo(0, T);
Pxl.Canvas.LineTo(W, L);
Image1.Picture.Bitmap := Pxl;
finally
Pxl.Free;
end;
try
Pxl2 := TBitmap.Create;
Pxl2.Width := 1;
Pxl2.Height := 1;
Box1 := MousePos.X;
Box2 := MousePos.Y;
BitBlt(Pxl2.Canvas.Handle, 0, 0, 1, 1, GetDC(0), Box1, Box2, SRCCOPY);
C := Pxl2.Canvas.Pixels[0, 0];
Coord.Text := IntToStr(Box1) + ', ' + IntToStr(Box2);
DelColor.Text := ColorToString(C);
HexColor.Text := IntToHex(GetRValue(C), 2) + IntToHex(GetGValue(C), 2) + IntToHex(GetBValue(C), 2);
RGB.Text := IntToStr(GetRValue(C)) + ', ' + IntToStr(GetGValue(C)) + ', ' + IntToStr(GetBValue(C));
Panel1.Color := C;
finally
Pxl2.Free;
end;
end;
procedure TForm1.OnKeyDown(Sender: TObject; var Key: Char);
begin
if Key = #13 then
begin
if Timer1.Enabled then
begin
Timer1.Enabled := false;
Panel2.Caption := 'Got it! Press Enter to reset.';
end
else
begin
Timer1.Enabled := true;
Panel2.Caption := 'Press Enter to lock color.';
end;
end;
end;
Run Code Online (Sandbox Code Playgroud)
注意:定时器设置为每10毫秒运行一次,如果这有任何区别.
任何和所有帮助弄清楚为什么这是泄漏和使用如此多的资源将非常感谢!
如果你需要,你可以在这里找到项目(Delphi 2010):http://www.mediafire.com/file/cgltcy9c2s80f74/Color%20Picker.rar
谢谢!
你永远不会释放你的Canvas1对象,泄漏进程堆和GDI obj.处理.
| 归档时间: |
|
| 查看次数: |
1504 次 |
| 最近记录: |