在使用.NET Remoting实现服务器来托管对象时,我试图辨别SingleCall和Singleton激活方法之间的区别。似乎SingleCall具有必须为每个客户端调用构造和清理对象的开销,而Singleton具有仅能够服务有限数量的同时请求的限制。我希望尽可能提高性能。我应该选择哪个?
答案 0 :(得分:3)
你是对的。 SingleCall为每个调用构建对象,并且可以接受多个同时发出的请求,但是数据不能在调用之间共享,而Singleton构建单个对象来处理允许数据共享的多个调用,但限制了同时连接。但是,如果你有一些关于如何构建线程安全对象的概念,你可以做一些调整。
首先,我建议使用Singleton,因为它只为许多人创建了一次。这样做的另一个好处是,您可以存储信息并在连接到它的用户之间共享信息,而无需经常访问外部商店。
其次,我会考虑将ConcurrencyMode = ConcurrencyMode.Multiple添加到服务的ServiceBehaviors中。这允许多个用户同时击中你的单身。
[ServiceBehavior(ConcurrencyMode=ConcurrencyMode.Multiple, InstanceContextMode = InstanceContextMode.Single)]
public class CalculatorService : ICalculatorConcurrency
{
…
}
第三,清理任何会使该类不是线程安全的代码。在访问多个线程可以同时访问的局部变量时,应该锁定对象。
可以在此处找到有关这些主题的大量有用信息:
答案 1 :(得分:2)
默认情况下,您应该使用SingleCall。
另外,请记住,使用SingleCall对象时,您无法共享呼叫状态。
我发现这个站点在.NET远程处理方面是一个很好的资源: http://www.thinktecture.com/resourcearchive/net-remoting-faq/remotingusecases