如果仅仅是Recordset对象,你可以把它Save到一个ADODB.Stream对象中,然后获取该对象的2进制串(这个操作和Marshel很类似)存入SPM。需要使用该recordset的时候可以通过反向操作来实现恢复出一个Recordset,这样可以减少SQL服务器的资源消耗,但是增加了组件服务器的内存消耗。ps:MS建议直接访问SQL,避免使用recrodset对象的filter操作,理由是filter操作会遍历整个recordset对象,而一般DBMS对于条件过滤(特别是复杂的)都会有优化。所以filter操作速度肯定比使用DBMS慢。ps again:我不是MS的

解决方案 »

  1.   

    bucher(bucher):但是Recordset对象可否直接被放入SPM中呢?
      

  2.   

    to bucher(bucher) :
    我看了一本书《Programming Distributed Applications with COM+ and Microsoft Visual Basic 6.0,Second Edition》,作者是Ted Pattison,中译本《COM+与Visual Basic 6分布式应用程序设计》,机械工业出版社。
    虽然是一本讲VB开发的书(我不喜欢用VB),但其对COM+的探讨很有深度,不可多得,而且中译本译得还凑合。
    此书讲到(中译本P326):“你应该避免在ASP Application变量中和SPM的共享资源中使用ADO记录集和ADO的Stream对象。因为它们的线程特性使得这样做是非常不尽人意的。在这些中间层变量中缓存XML文本总是安全的,因为这些数据不过是一个字符串而已。你的另一个选择是,把只读的XML数据加载到一个DOMFreeThreadedDocument对象中。该对象具有完善的线程性能,这就使得把它缓存到ASP Application变量中和SPM的共享资源中都是可以接受的。”
    你的方法与Ted是基本一致的,而且给我一个很有益的思路。非常感谢!
    不过我没有在MSDN上找到DOMFreeThreadedDocument的接口,因为我用VC做程序,VC没有对这个对象的直接支持。