我在用Delphi开发一个多层结构系统中,服务端需要经常处理客户请求,所以要大量创建业务对象。结构如下:     客户----> 服务 ----> 创建、调用Delphi写的企业逻辑对象所以我在“服务”调用对象的时候,打算写一个对象池,让服务从对象池里取得已经创建好的对象,使用完后再放回对象池,等待下次调用。我的对象池思路是:1、创建一个TList类,作为对象池的容器;2、设置TList最大长度100(可调),并且记录100个正在使用的和未使用的Index;3、服务需要对象时,从TList里取出一个未使用的对象,使用完后恢复默认状态再标记成未使用;如果全部100个都已在使用中,则创建新对象,使用完后Free释放;以上是我的思路,虽然很简单,但我只需要满足基本的对象池功能,提高运行效率既可。本人对Delphi的对象池是初学者,想请问各位这样做是否可行,还需要什么。谢谢。

解决方案 »

  1.   

    你不能确定多个用户谁在用些什么,也不能确定对象里获取了什么,释放完毕没有,
    很多的不可能,1个2个也许还行,多了还是用Tthreah吧。
      

  2.   

    我曾经开发了一个Java的数据库连接池,和我的思路基本一致。性能比没有用连接池大大提高。我的服务是多线程的(类似WEB服务器),每个服务响应之间不会有影响。但每个响应都会做如下业务处理:var
      Obj:TMyObject;
    begin
      Obj:=TMyObject.Create;
      try
        ...
      finally
        Obj.Free;
      end;
    end;可以看出来在大量的用户响应情况下,要频繁创建TMyObject对象,这是非常消耗系统资源的。
    所以我如果在对象池里储存若干创建好的对象,用的时候取出,用完后放回这样不用消耗创建对象过程。需要做的关键是管理好这个对象池的存取即可。另外,请问潇潇“服务共享”是什么意思,我有点不明白。谢谢。
      

  3.   

    补充一下:我的对象池里只放一种对象(TMyObject)
      

  4.   

    再补充一下:我的多层系统和数据库不打交道,也不用DCOM,和各位熟悉的李维写的多层系统(DCOM)不太一样,也许是因为李维讲的全是数据库的例子的原因吧。而且对于Web系统,李维讲的也许不太适合。
    我的多层倒和J2EE某些概念相似:客户端负责显示,服务处理用户请求,业务对象(TObject)处理业务逻辑。
    本人先用的 Delphi,后用Java,现在又在用Delphi.希望大家讨论一下。
      

  5.   

    没有必要自己写一个对象池,
    用接口不就成了?
    Delphi在实现接口的时候,已经实现了对象池,
    为什么不利用现成的东西?
    如果不想让系统自动管理,完全可以自己控制接口的引用计数
    楼主有时间可以去看看《COM原理与应用》和《Inside VCL》第6章
      

  6.   

    再补充一点:
    一说起Delphi里面的接口,有些人总以为只在COM应用的时候才有用,
    其实这是一个误区,Delphi的接口起源于COM,但是并不是只限于COM应用,
    接口是Delphi的一个核心功能