社区
C#
帖子详情
C#里面如何保持多个用户使用同一对象实例?
comradeinit
2006-05-23 09:12:36
目前的解决方案是做成COM+,一个方法是使用静态字段,另一方法是使用对象池。请教高手们有没有更好的方法,前面的两个方法哪个更好?谢谢。
...全文
479
16
打赏
收藏
C#里面如何保持多个用户使用同一对象实例?
目前的解决方案是做成COM+,一个方法是使用静态字段,另一方法是使用对象池。请教高手们有没有更好的方法,前面的两个方法哪个更好?谢谢。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
16 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
comradeinit
2006-05-24
打赏
举报
回复
to Ivony(要在一个机器上只能有一个实例?):我的目的是在内存建立对象库,由多进程访问,其中访问客户包括WebService服务和普通桌面程序,它们共同访问同一对象库,在C++里我是用共享内存实现的,但C#管制程序不支持。
真相重于对错
2006-05-24
打赏
举报
回复
lz的com+ Pool 方式应该可以,记住组件类要加上
[Synchronization]
禁止一个以上客户端同时调用
comradeinit
2006-05-24
打赏
举报
回复
谢谢hdt(倦怠)的详细介绍。我试过单件模式也可以,但一般不能把服务器对象作单件模式处理,否则客户端不好用new建立代理对象。可另建一个普通对象不要从servicecomponent继承,使用单件模式,在服务器对象中引用普通单件对象即可,不过毕竟是使用同一对象实例,不管那种方法都必须考虑线程安全。另请教一下hdt(倦怠),有其他不用new的方法建立客户端代理对象吗?
真相重于对错
2006-05-24
打赏
举报
回复
个人感觉单件模式只是逻辑上能达到lz的要求,因为要在一个进程下可以,多进程,能保证么?
真相重于对错
2006-05-24
打赏
举报
回复
服务器激活请参见
激活 | 客户端激活 | WellKnownObjectMode 枚举 | 激活 | 生存期租约
语言
C#
Visual Basic
全部显示
服务器激活的对象是其生存期由服务器直接控制的对象。服务器应用程序域只有在客户端在对象上进行方法调用时才创建这些对象,而不会在客户端调用 new(在 Visual Basic 中为 New())或 Activator.GetObject 时创建这些对象;这节省了仅为创建实例而进行的一次网络往返过程。客户端请求服务器激活的类型实例时,只在客户端应用程序域中创建一个代理。然而,这也意味着当您使用默认实现时,只允许对服务器激活的类型使用默认构造函数。若要发布其实例将使用带参数的特定构造函数创建的类型,可以使用客户端激活或者动态地发布您的特定实例。
服务器激活的对象有两种激活模式(或 WellKnownObjectMode 值):Singleton 和 SingleCall。
Singleton 类型任何时候都不会同时具有多个实例。如果存在实例,所有客户端请求都由该实例提供服务。如果不存在实例,服务器将创建一个实例,而所有后继的客户端请求都将由该实例来提供服务。由于 Singleton 类型具有关联的默认生存期,即使任何时候都不会有一个以上的可用实例,客户端也不会总接收到对可远程处理的类的同一实例的引用。
SingleCall 类型对于每个客户端请求始终只有一个实例。下一个方法调用将由另一个服务器实例提供服务,即使上一个实例尚未被系统回收。SingleCall 类型不参与生存期租约系统。
为了创建服务器激活的类型的实例,客户端要么以编程方式(或使用配置文件)配置它们的应用程序并调用 new,要么在对 Activator.GetObject 的调用中传递远程对象的配置。
注意 可能不需要在客户端上注册信道。如果客户端未注册信道,远程处理系统将使用在 Machine.config 文件中指定的默认信道之一自动选择或创建一个信道以发出传出的请求。客户端上的这一自动信道选择并不注册信道来侦听服务器中的任何回调函数,并且不注册任何自定义信道实现(除非该自定义信道已添加到 machine.config 文件中)。这些情况下,必须在客户端应用程序域中注册要使用的信道类型。
下面的代码示例显示一个对 Activator.GetObject 的调用(假定已经注册一个 TcpChannel 以在端口 8080 上通信)。如果客户端只知道服务器对象实现了某个特定的接口,则必须使用对 Activator.GetObject 的调用,这是因为您只能使用 new(在 Visual Basic 中为 New)创建类的实例。
Ivony
2006-05-24
打赏
举报
回复
要在一个机器上只能有一个实例?
Ivony
2006-05-24
打赏
举报
回复
C#肯定不支持的,因为垃圾回收的缘故,托管对象在内存中的位置是不固定的。到现在才弄明白楼主要做一个什么东西。
tl0
2006-05-23
打赏
举报
回复
同意楼上单件模式
marvelstack
2006-05-23
打赏
举报
回复
在服务器端使用单件模式,但是要使用线程安全,
http://zhzuo.cnblogs.com/archive/2004/07/18/25324.html
comradeinit
2006-05-23
打赏
举报
回复
wuyazhe和songhtao的方法同我原来使用静态字段的方法类似,结帖给分。不知还有其他方法没有???
Ivony
2006-05-23
打赏
举报
回复
请问对象池怎么让几个用户使用“同一个”实例?
我不懂电脑
2006-05-23
打赏
举报
回复
单件模式用在服务端可以保证服务端只有一个实例。
兔子-顾问
2006-05-23
打赏
举报
回复
使用设计模式里的“单例模式”。
Ivony
2006-05-23
打赏
举报
回复
其实说白了就是LazyLoad了
if( instanse == null )
instanse = CreateInstanse();
return instanse;
Ivony
2006-05-23
打赏
举报
回复
to Ivony:对象数最大最小都为1,但要考虑线程安全
那还叫池吗?
comradeinit
2006-05-23
打赏
举报
回复
to Ivony:对象数最大最小都为1,但要考虑线程安全
C#
知识|事件集中响应,
多个
按钮关联
同一
事件(
实例
练习)
哈喽,你好,我是雷工!本节学习窗体Controls集合、控件事件的统一关联及如何优化重复代码。
C#
多页面共用一个
实例
不同的形参,同时保证
同一
形参前提下,项目内获取到的CANClass都是一样的。:用于确保一个类只有一个
实例
,并提供一个全局访问点来访问该
实例
。进行唯一标识,如果想连接
多个
设备时,只需要。
C#
创建类的
多个
对象
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace _0607_创建类的
多个
对象
{ class Program { static void Main(string...
多个
对象
指向
同一
个
实例
化空间问题
多个
对象
指向
同一
个
实例
化空间: 代码格式:类名
对象
1 = new 类型( ); 类名
对象
2 =
对象
1; 则
对象
1和
对象
2指向
同一
个
实例
化空间,
对象
1调用属性和
对象
2调用属性后的值都相同,值为后调用的值。
对象
1和
对象
2指向
同一
个堆内存地址,共用一块内存空间。例如: ...
c#
EF ObjectStateManager 中已存在具有
同一
键的
对象
。ObjectStateManager 无法跟踪具有相同键的
多个
对象
出现的问题如标题所示出现这个问题的原因是当前
使用
的entity
对象
已经在ef上下文中被附加了,如果要解决这种问题的话,网上有很多都是在查询的时候加入一个AsNoTracking()方法,表示查询的时候让上下文不要跟踪这个
对象
,不知道具体作用如何,反正我用过,是不行的。希望大家有成功的,能与我分享一下。这里说一下我的解决方法,大家应该做这些的时候都会封装一些Helper,以便调用,那么肯定
使用
的上下...
C#
111,120
社区成员
642,545
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章