gpt4 book ai didi

delphi - 我的 Delphi 程序似乎正在泄漏

转载 作者:行者123 更新时间:2023-12-03 15:20:28 25 4
gpt4 key购买 nike

好吧,我对 Delphi 还很陌生(正如您从我的代码中看到的那样 - 尽量不要笑得太厉害而伤害自己),但我已经成功制作了一个小型桌面 Canvas 颜色选择器。它确实有效,这就是我来这里的原因:D

好像漏水了。它一开始使用大约 2 MB 的内存,并以每秒大约 2 kB 的速度攀升,直到 10 分钟左右达到大约 10 MB。在我的双核 2.7 GHz cpu 上,它使用的 cpu 功率从 5% 到 20% 不等,波动很大。我的计算机在没有停止计时器的情况下运行了大约 10 分钟后变得没有响应。

您可以在下面的源代码中看到我正在释放 TBitmap(或者尝试释放 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;

注意:计时器设置为每 10 毫秒运行一次(如果这有什么区别的话)。

任何人和所有帮助弄清楚为什么会泄漏并使用如此多的资源将不胜感激!

如果需要,您可以在此处获取该项目 (Delphi 2010):http://www.mediafire.com/file/cgltcy9c2s80f74/Color%20Picker.rar

谢谢!

最佳答案

您从未释放 Canvas1 对象,从而泄漏了进程堆和 GDI 对象。 handle 。

关于delphi - 我的 Delphi 程序似乎正在泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6381020/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com