type
  
  TMydata = class(Tobject)
    text:array[0..100] of char;
    Int:integer;
  end;  创建:
  node.data:=mydata.create  
  当有 100 多个 node 的时候  读取 或 修改 node.data 内容时 CPU 90以上  比如:  for i:=0 to 200 do
    strcopy(Tmydate(tv1.items[i].data).text,PChar(inttostr(i));改用  TMydata = class  是否可行?  

解决方案 »

  1.   

    你这个,我感觉不用class阿??
    用,结构就可以了。
    然后,开始的时候初始化一下,给结构指针分配空间,指针地址赋给data就可以了。
      

  2.   

    TMydata = class(Tobject) 
        text:array[0..100] of char; 为什么不使用 string/string[n]
        Int:integer; 
    end; -------------------------
     for i:=0 to 200 do 
        Tmydate(tv1.items[i].data).text:=inttostr(i); 这样不好吗?------------------------- 当有 100 多个 node 的时候  读取 或 修改 node.data 内容时 CPU 90以上 循环本身没有问题,可能是使用tv1.items[i].data,会影响您的性能吧,TTreeView检索Items[i]后有一些API效率的影响!
      

  3.   

    看不懂Node.data本身就是个指针,你可以再add时候添加指向某个结构的指针
      

  4.   

    class后面不指名类型的话,默认是class(Tobject) 
      

  5.   

    我改用 record 效果也是一样,占用CPU很高。
      

  6.   

    占cpu高,那是你程序的问题,跟record有什么关系
      

  7.   

    问题可能是在 读取 与 修改 data 。
      

  8.   

    那是你代码进行频繁操作所致,和data无关
      

  9.   

    我是这样查找 node   if PTVData(tv1.items[i].data)^.text =  xxx then
      

  10.   

    在你这段代码前后用GetTickCount()取一下时间,然后看这两句代码用时多久.
    for i:=0 to 200 do 
        Tmydate(tv1.items[i].data).text:=inttostr(i); 这样不好吗? 个人猜想应该不这两句代码的问题,可能是你其他代码的问题.GOOD LUCK.