首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

项目碰到最大的困境,也不知道何去何从

2013-08-09 
项目遇到最大的困境,也不知道何去何从。写了好几个月,收尾阶段了,本来以为可以结束了结果遇到了问题 实在无

项目遇到最大的困境,也不知道何去何从。
写了好几个月,收尾阶段了,本来以为可以结束了
结果遇到了问题 实在无法解决。代码还算有点大,接近1W5行的样子
问题出在了使用了泛型list,里面都是存储结构体
然后大量的在调用过程中使用,调用过程又都是在线程里面。
线程要多次 启动和结束,每次启动和结束的时候都会发现内存一下子上去了,然后在线程运行中会发现内存也是缓慢增加的。用了工具定位,全部都定位到泛型list创建的位置,查了一下资料。有可能有几种原因。也不确定。(delphi2010)
1、泛型list里面的结构体是有string类型的,释放不干净,这个也不知道怎么处理。
2、泛型list在过程里面调用了clear方法,没有释放对象(这个我做过实验,貌似内存没增长)
3、泛型list本身就有问题,是一个编译器bug,需要版本更新。
4、我代码本身的问题,有些地方没释放,但是我是窗体创建的时候创建,窗体销毁的时候free的,最后也没提示内存泄露啊。在中间过程的内存不断上涨(多线程 启动之后 内存先增加再减少,然后稳定,线程结束之后重新启动 内存一下子增加了好多。中间我都是用clear去清理的不知道是不是这个原因)
5、问了论坛的一些朋友 一般给的代码都是 创建没多久就销毁了,问题是我的程序需要创建 之后 在线程里面多次操作
线程也是多次的 启动 退出 最后程序完全退出的时候才退出。(这样的话 借用别人的话来说 就是要考虑生命周期的问题)可是我不会处理
经过这几个月的代码编写,我深深的感到了delphi  程序员的无奈 资料很难找 问了之后 即使有回答的 也是要自己重新摸索好久。有些底层的东西  要自己处理 处理不好 往往问题很大。
诶,好多天没好好休息了。有愿意聊的,说个话。
聊的开心的就当散分吧。 多线程 内存 泛型
[解决办法]
对于某个特定类型就写个对应的代理类,类中包含一个私有的TList:

TSOList = class
private
  FList: TList;
public
  procedure Add(so: Tso);
  procedure Delete(i: integer);
  procedure Insert(i: integer;so: TSO);
  procedure Clear;

  contructor Create;
  destructor Destroy; override;
end;

constructor TSOList.Create;
begin
  FList := TList.Create;
end;

destructor TSOList.Destroy; 
begin
  FList.Free;
  inherited;
end;

procedure TSOList.Add(so: TSO);
begin
  FList.Add(@so);
  //这里相当于一个代理操作,下面几个类似,我便不重复叙述了
end;

这种方法我用了很久,虽说有些麻烦,但还是很安全。当你要用的数据结构并不多时,可以考虑

热点排行