应用服务器是采用的Aparment,MultiInstance。而且在软、远程数据模块中使用的多Session,按理说,应用服务器会为每个客户端建立一个实例,而且每个实例都有单独的一个Session连接数据库。这样客户的操作应该是并行的,而我做了很多试验,结果显示应用服务器处理客户端请求是一个接一个的,当一个复杂任务执行很长时间时,其他客户端只有等其完成。请问是什么原因呢?

解决方案 »

  1.   

    谁说 apartment 是那样的,Session 肯定没设对,所以当执行一个复杂任务时,Session 进入一个临界代码段,它阻塞了其它 Apartment 线程运行  用了 session 的东东要设 Session->AutoSessionName = true, Database ->Session = Session  BDE 的最大 Session 数量只能是 50 - 60 之间,所以BDE可能不是什么适合三层开发,你可以考虑尝试ADO或DBExpress
      

  2.   

    Session.AutoSessionName := True;//这是肯定定的;
    DataBase.Session := SessionName;//也不可以少;
    上边的确都说了,还有就是,这种方法没有在本质上解决一些问题,有时间就看一看它的Pooling,这样才能让Aparment + MultiInstance 发挥的更好;
    代码我记得已经贴过了,而且,对Pooler的说明我也贴过了,希望对你有用;
    在多层中,线程、实例可以说是提高效率的最大障碍
      

  3.   

    强烈建议丁丁看一下<delphi5.x分布式多层系统篇>(李维,机械工业)
      

  4.   

    请问各位,在D7中,DBExpress有了SQL SERVER2000的驱动,请问支持程度好吗?为何我用这个驱动的时候总有些毛病呢?
      

  5.   

    其实,就是一个Session Pooler的问题;
      

  6.   

    session怎么用才能让中间层一个对象使用一个,互不影响呢?
      

  7.   

    那个 sleep 是让线程等待一个时间如果线程是阻塞的(或是没有线程),它们间就会互相影响, 一个个执行
    如果没有阻塞 sleep 就是每个线程同时发生, 没有什么影响
      

  8.   

    对呀,情况就是sleep是阻塞的,请问为什么呢,我用的是aparment,multiInstance.sleep没有理由是阻塞的呀。迷惑!
      

  9.   

    太难回答了到 msn 来问我search name :  [email protected]