如何通过WCF调用优化Collection的读写并发性

本文关键字:读写 并发 Collection 优化 何通过 WCF 调用 | 更新日期: 2023-09-27 17:53:53

  1. 在我的WCF服务端有一个Collection变量和一个Add方法。Add方法会在触发某个事件时将一些记录记录记录到集合中。以下是要求:现在在客户端,有一个线程可以每秒读取WCF服务端的Collection,并删除之前读取的记录并将其显示到前台

我的问题是:如何控制阅读和写作的节奏会更好。(不是线程安全的,所以在读取时会得到重复的值(

目前我使用定时器来并发它,当定时器事件被触发时,使定时器停止,直到读取结束。然后让计时器启动(为了防止计时器事件没有完全执行,再次触发下一个操作(。I使用Monitor.TryEnter作为线程锁,代码如下所示:

void ReadFromService()
{
//do........
timer.start();//
}

Timer timer=new Timer(1000);
timer.Elapsed +=(s,e)=>{
timer.stop();
ReadFromService();
};
timer.start();

我认为这不是一个好主意,我希望有人能给我一些好的建议。

如何通过WCF调用优化Collection的读写并发性

阅读器客户端最好不要有计时器。这并不是说并发性特别困难,只是在通信通道上轮询效率很低。

相反,您可以让Add方法在Reader客户端中触发一个事件,将添加的记录传递给它,或者让该事件充当读取集合的更新快照的触发器,然后服务在返回新快照之前适当地锁定集合。

这是Observer模式的一种有限形式,如果您有更多完整的集合读取器,或者新的读取器希望查看集合中不同数据子集的更改,那么它很容易扩展。

此处提供有关WCF事件(回调(的信息。

查看

ConcurrentList<T>

类:http://www.deanchalk.me.uk/post/Task-Parallel-Concurrent-List-Implementation.aspx