如何把业务对象持久化到内存中

david_ye 2003-08-25 01:57:34
服务器端把业务对象持久化到内存中,根据客户端传来的对象名,在服务器端实例化一个对象,并返回给客户端
...全文
143 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
yanghuanji 2003-12-26
  • 打赏
  • 举报
回复
这个问题的解决我推荐:http://www.marshine.com中持久化PDO结构。请各位参看。
david_ye 2003-09-03
  • 打赏
  • 举报
回复
该贴已结
timmy3310 2003-09-02
  • 打赏
  • 举报
回复
对象池使用到了Com+服务

你的业务对象必须从System.EnterpriseServices.ServicedComponent派生:
并且应用ObjectPooling属性

[ObjectPooling(Enabled=true, MinPoolSize=2, MaxPoolSize=5, CreationTimeOut=20000)]
public class TestObjectPooling : ServicedComponent
{
public void Perform ()
{
// 主要的方法
// 业务逻辑
}
public override void Activate()
{
// 当对象被激活的时候由Com+调用
}
public override void Deactivate()
{
// 当对象被停用的时侯由Com+调用
}
public override bool CanBePooled()
{
// 返回一个值,表示此对象能否被放入池中缓存
return true;
}
}

在客户端:
//用new创建对象,由于该类型使用了对象池,因此实际上是在池中获取缓存的对象返回,然后由obj变量引用
TestObjectPooling obj = new TestObjectPooling();
obj.Perform();//调用业务逻辑

//释放引用,该对象会被对象池处理,决定是否放回池中
ServicedComponent.DisposeObject (order);


另外,ServicedComponent本身从MarshalByRefObject派生,因此可以直接配置为远程对象,所以你可以把Com+组件注册到服务器端,客户端进行远程配置就行了,上面的代码不用更改。

关于ServicedComponent和.Net Remoting,恕我不能一一道明,这方面的内容以前的帖子有很多,而且MSDN中的帮助也很清楚,我只是给你指个方向,不可能将那么完整,毕竟内容比较多。
david_ye 2003-09-02
  • 打赏
  • 举报
回复
To: timmy3310(Tim)
能在在详细点?
youwanna 2003-09-01
  • 打赏
  • 举报
回复
老大,能详细一点吗?
强烈gz
lx1920 2003-09-01
  • 打赏
  • 举报
回复
也可以使用静态的hashtable
public class TestHash
{
private static Hashtable myObject1=null;

public TestHash()
{
//实例化对象时将一些对象放入hashtable
}
}
timmy3310 2003-09-01
  • 打赏
  • 举报
回复
可以使用Com+的对象池,结合.Net Remoting来完成你的任务
简单的使用对象池的列子:

[ObjectPooling(Enabled=true, MinPoolSize=2, MaxPoolSize=5, CreationTimeOut=20000)]
public class TestObjectPooling : ServicedComponent
{
public void Perform ()
{
// 主要的方法
}
public override void Activate()
{
// 当对象被激活的时候由Com+调用
}
public override void Deactivate()
{
// 当对象被停用的时侯由Com+调用
}
public override bool CanBePooled()
{
// 返回一个值,表示此对象能否被放入池中缓存
return true;
}
}
timmy3310 2003-09-01
  • 打赏
  • 举报
回复
可以使用Com+的对象池,结合.Net Remoting来完成你的任务
简单的使用对象池的列子:

[ObjectPooling(Enabled=true, MinPoolSize=2, MaxPoolSize=5, CreationTimeOut=20000)]
public class TestObjectPooling : ServicedComponent
{
public void Perform ()
{
// 主要的方法
}
public override void Activate()
{
// 当对象被激活的时候由Com+调用
}
public override void Deactivate()
{
// 当对象被停用的时侯由Com+调用
}
public override bool CanBePooled()
{
// 返回一个值,表示此对象能否被放入池中缓存
return true;
}
}
david_ye 2003-09-01
  • 打赏
  • 举报
回复
给位大哥能给个例子吗?
qhgary 2003-08-29
  • 打赏
  • 举报
回复
用.net remoting不就行了么,这些都已经做好的啊
qqchen79 2003-08-28
  • 打赏
  • 举报
回复
>> 请问在.NET中用什么方法开辟缓存池,
MemoryStream

>> 如何把我的类缓存到内存中,谢谢!
Serialization
xys2003 2003-08-28
  • 打赏
  • 举报
回复
学习
qiujoe 2003-08-28
  • 打赏
  • 举报
回复
试试com+对象池
david_ye 2003-08-28
  • 打赏
  • 举报
回复
整个CSDN难道没有人知道吗?
david_ye 2003-08-26
  • 打赏
  • 举报
回复
To: freeboy0002(晓风残月)
请问在.NET中用什么方法开辟缓存池,如何把我的类缓存到内存中,谢谢!
freeboy0002 2003-08-25
  • 打赏
  • 举报
回复
不过你要自己维护和优化缓存池,不是很方便
freeboy0002 2003-08-25
  • 打赏
  • 举报
回复
你是实现类似Ejb中实体Bean的持久化吧?
可以开辟一个缓存池,然后配合使用“工厂方法“和“单态“的设计模式,创建的时候先去池中找,找到后返回实例,如没有发现,创建实例加入到池中
可使用Activator.CreateInstance(Type.GetType(className));动态创建对象
Brunhild 2003-08-25
  • 打赏
  • 举报
回复
这有点象remoting,有兴趣可以看看。

110,502

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧