C# 我使用的是框架3.5,不能使用ConcurrentBag实现。或者我应该自己实现这个逻辑。@d尝试读写器锁定还是锁定_syncobjectobject对象哪个是理想的?@Fer:ReaderWriterLock在lock上没有太多性能,使用lock会更简单
C# 我使用的是框架3.5,不能使用ConcurrentBag实现。或者我应该自己实现这个逻辑。@d尝试读写器锁定还是锁定_syncobjectobject对象哪个是理想的?@Fer:ReaderWriterLock在lock上没有太多性能,使用lock会更简单,c#,multithreading,static-methods,C#,Multithreading,Static Methods,我使用的是框架3.5,不能使用ConcurrentBag实现。或者我应该自己实现这个逻辑。@d尝试读写器锁定还是锁定_syncobjectobject对象哪个是理想的?@Fer:ReaderWriterLock在lock上没有太多性能,使用lock会更简单、更可读。我不确定读写器锁定是这里的最佳选择。作者的速度会很快,读者的速度会慢很多。它需要测试。考虑到拥有数据结构的只读副本在性能方面似乎不错。我会阅读并思考你的建议。谢谢 internal class EventManager { p
我使用的是框架3.5,不能使用ConcurrentBag实现。或者我应该自己实现这个逻辑。@d尝试读写器锁定还是锁定_syncobjectobject对象哪个是理想的?@Fer:ReaderWriterLock在
lock
上没有太多性能,使用lock
会更简单、更可读。我不确定读写器锁定是这里的最佳选择。作者的速度会很快,读者的速度会慢很多。它需要测试。考虑到拥有数据结构的只读副本在性能方面似乎不错。我会阅读并思考你的建议。谢谢
internal class EventManager
{
private static List<EventRecord> s_listEvents = new List<EventRecord>();
public static void AddEvent(EventRecord record)
{
record.EventDate = DateTime.Now;
s_listEvents.Add(record);
}
public static List<EventRecord> GetRecordsByDate(DateTime date)
{
var r = (from l in s_listEvents
where l.EventDate >= date
select l).ToList<EventRecord>();
return r;
}
}
internal class EventManager
{
private static List<EventRecord> s_listEvents = new List<EventRecord>();
private static object _syncObject = new object();
public static void AddEvent(EventRecord record)
{
record.EventDate = DateTime.Now;
lock(_syncObject)
{
s_listEvents.Add(record);
}
}
public static List<EventRecord> GetRecordsByDate(DateTime date)
{
lock (_syncObject)
{
var r = (from l in s_listEvents
where l.EventDate >= date
select l).ToList<EventRecord>();
return r;
}
}
}
internal class EventManager
{
static ReaderWriterLock rwl = new ReaderWriterLock();
private static List<EventRecord> s_listEvents = new List<EventRecord>();
public static void AddEvent(EventRecord record)
{
record.EventDate = DateTime.Now;
rwl.AcquireWriterLock(0);
try
{
s_listEvents.Add(record);
}
finally
{
rwl.ReleaseWriterLock();
}
}
public static List<EventRecord> GetRecordsByDate(DateTime date)
{
rwl.AcquireReaderLock(0);
try
{
var r = (from l in s_listEvents
where l.EventDate >= date
select l).ToList<EventRecord>();
return r;
}
finally
{
rwl.ReleaseReaderLock();
}
}
}
private object _lock;
public static void AddEvent(EventRecord record)
{
lock (_lock)
{
record.EventDate = DateTime.Now;
s_listEvents.Add(record);
}
}