【发布时间】:2015-07-03 04:30:00
【问题描述】:
我有一个自托管的 wcf 单例服务。有两个客户在使用它。服务有一个 List 类型的实例变量。有三种方法。一个添加,一个删除,最后检查列表是否为空。 Client1 仅使用 add 方法。 Client2 使用 remove 和 isEmpty 方法。我想知道在这种情况下这些方法是否需要锁定?有没有更好的方法来解决这个问题来提高性能?
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single,ConcurrencyMode = ConcurrencyMode.Multiple)]
public class Service : IService
{
// will it be better to make it static ?
List<Parameter> _fileList = new List<Parameter>();
// Is this required ?
readonly object _lock = new object();
public bool FileEnQueue(Parameter parameter)
{
lock (_lock)
{
_fileList.Add(parameter);
}
return true;
}
public Parameter FileDeQueue()
{
lock (_lock)
{
Parameter parameter = new Parameter();
if (_fileList.Count > 0)
{
parameter = _fileList.ElementAt(0);
_fileList.Remove(parameter);
}
return parameter;
}
}
public bool IsQueueEmpty()
{
lock (_lock)
{
if (_fileList.Count == 0)
return true;
else
return false;
}
}
}
【问题讨论】:
-
当您说增强性能时,您能说明您的意思吗?什么是慢的,你是如何衡量它的?
-
@marc_s ConcurrencyMode = ConcurrencyMode.Multiple 不允许同时使用多个线程吗?
-
@MauricioGracia 如果不需要锁定并且我正在使用它,它会使这个速度变慢(每秒处理的请求数)。不是吗?所以一些技术可以让它处理更多的请求。
标签: c# multithreading wcf