关于局部变量的内存占用问题。
写了一个小软件。发现内存占用率会随着执行一个函数的次数而增加。
注释掉使用这行函数的代码内存就 很正常了
function SetBmpMon(Mapcode:string;x,y:Integer;MonName:string;Range,quantity;Bmpp:TBitmap):TBitmap;
var
Sx,Ex,Sy,Ey,i,j,k:Integer;
XList:TStringList;
YList:TStringList;
Can:Boolean;//用来标识该范围是不是全部都不能刷怪
bmp:TBitMap;
begin
bmp:=Tbitmap.create;
bmp:=bmpp;
can:=False;
sx:=x-Range;
ex:=x+Range;
sy:=y-Range;
ey:=y+Range;
if Sx < 1 then sx:=0;
if Ex > Bmp.Width-1 then ex:=Bmp.Width;
if Sy < 1 then sy:=0;
if Ey > Bmp.Height-1 then ey:=Bmp.Height;
Xlist:=TStringList.Create;
YList:=TStringList.create;
for i := sx to ex-1 do
begin
for j := sy to Ey-1 do
begin
if canwalk[i,j] then
begin
XList.Add(IntToStr(i));
YList.Add(IntToStr(j));
can:=True
end;
end;
end;
if can then
begin
while quantity <> 0 do
begin
k:=Math.RandomRange(0,XList.Count);
i:=StrToInt(XList[k]);
j:=StrToInt(YList[k]);
bmp.Canvas.Pixels[i,j]:=clRed;
bmp.Canvas.Pixels[i+1,j]:=clRed;
bmp.Canvas.Pixels[i-1,j]:=clRed;
bmp.Canvas.Pixels[i,j+1]:=clRed;
bmp.Canvas.Pixels[i,j-1]:=clRed;
bmp.Canvas.Pixels[i+1,j+1]:=clRed;
bmp.Canvas.Pixels[i-1,j-1]:=clRed;
bmp.Canvas.Pixels[i+1,j-1]:=clRed;
bmp.Canvas.Pixels[i-1,j+1]:=clRed;
MonName[i+1,j]:=name;
MonName[i-1,j]:=name;
MonName[i,j+1]:=name;
MonName[i,j-1]:=name;
MonName[i+1,j+1]:=name;
MonName[i-1,j-1]:=name;
MonName[i+1,j-1]:=name;
MonName[i-1,j+1]:=name;
MonName[i,j]:=name;
quantity:=quantity-1;
end;
end else
begin
while many <> 0 do
begin
i:=Math.RandomRange(0,bmp.Width);
j:=Math.RandomRange(0,bmp.Height);
if canwalk[i,j] then
begin
bmp.Canvas.Pixels[i,j]:=clRed;
bmp.Canvas.Pixels[i+1,j]:=clRed;
bmp.Canvas.Pixels[i-1,j]:=clRed;
bmp.Canvas.Pixels[i,j+1]:=clRed;
bmp.Canvas.Pixels[i,j-1]:=clRed;
bmp.Canvas.Pixels[i+1,j+1]:=clRed;
bmp.Canvas.Pixels[i-1,j-1]:=clRed;
bmp.Canvas.Pixels[i+1,j-1]:=clRed;
bmp.Canvas.Pixels[i-1,j+1]:=clRed;
MonName[i+1,j]:=name;
MonName[i-1,j]:=name;
MonName[i,j+1]:=name;
MonName[i,j-1]:=name;
MonName[i+1,j+1]:=name;
MonName[i-1,j-1]:=name;
MonName[i+1,j-1]:=name;
MonName[i-1,j+1]:=name;
MonName[i,j]:=name;
quantity:=quantity-1;
end;
end;
end;
Result:=Bmp;
end;