窗体中有一个treeview控件,其中数据比较多,有2000条左右,且都分配了指针,也就是node.data都分配了。
现在的问题是:
在form的destroy事件中,已经将treeview的指针都释放掉了,但窗台关闭后,有一段时间cpu 占用达到100%。原来treeview数据较少时,没有这个问题,求教各位高手,该如何处理????
现在的问题是:
在form的destroy事件中,已经将treeview的指针都释放掉了,但窗台关闭后,有一段时间cpu 占用达到100%。原来treeview数据较少时,没有这个问题,求教各位高手,该如何处理????
解决方案 »
- 求助关于线程的创建和调用的基本问题,刚接触线程不是很懂,谢谢大家
- 如何判断进程中的IEXPLOER.exe进程数大于1,并将同样的多余的进程关闭
- 关于delphi操作Word的问题,少了可以再加!!!
- 急,急,求教,请教,在线等待!关于数据库字段查找的程序.请帮忙分析不能执行的原因..
- 有关TMediaPlayer的一个问题
- 对delphi6中decision cube的一点点批评!!!!!!!!!!!!!!!!!!!!!
- dbgrid中判断输入的是否为日期(急)
- TreeView内部的节点创建以后,我想实现运行时可以用鼠标拖动来更改其中节点的顺序,该怎么办?
- 在哪可以找到adc 套件!!!!
- 在delphi如何实现象windows里的画图中的颜色合????
- 散分散分,没事散散分~~~
- 如何实现enter(回车键)跟tab键的效果一样,在回车时自动使Taborder比自己大的物件获得焦点
for I := 0 to tv1.Items.Count - 1 do
if Assigned(tv1.items.item[I].Data) then
Dispose(tv1.items.item[I].Data);
begin
if tv1.items.item[I].Data <> nil then
Dispose(tv1.items.item[I].Data);
end;
我在里面的窗体是在pagecontrol上打开的,在窗体关闭时,承载窗体的pagecontrol页面也同时关闭,以前数据少时可以同时关闭,现在数据多了,就出现窗体关闭了,然后cpu100%,过几十秒,pagecontrol才能关闭。 任务管理器中也显示,project1.exe占用cpu98%。
for I := 0 to tv1.Items.Count - 1 do
if Assigned(tv1.items.item[I].Data) then
Dispose(tv1.items.item[I].Data);其次,你的Dispose(tv1.items.item[I].Data);代码存在隐患,操作系统可能不知道释放多少内存,因为Dispose地时候,不知道要释放的大小。应该如此:Dispose(PMyData(tv1.items.item[I].Data));其中,PMyData是存储在Data域的记录结构。PMyData = ^TMyData;
TMyData=record
....
end;
TMyData1=Record
myid:integer;
end;var myrec:pmydata1;树中每个node建立时,都是用new(myrec),给node的data
Q:会不会是内存处理回收?修改以下代码试试看:
Dispose(tv1.items.item[I].Data);-->Dispose(PMyData1(tv1.items.item[I].Data));
procedure TForm_rxfc.FormDestroy(Sender: TObject);
var i:integer;
begin
tv1.OnChange := nil;
for I := 0 to tv1.Items.Count - 1 do
if Assigned(tv1.items.item[I].Data) then
Dispose(Pmydata1(tv1.items.item[I].Data));
end;
var i:integer;
begin
tv1.OnChange := nil;
for I := 0 to tv1.Items.Count - 1 do
begin
if Assigned(tv1.items.item[I].Data) then
Dispose(Pmydata1(tv1.items.item[I].Data));
Application.Progress;
end;
end;