Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我使用的是框架3.5,不能使用ConcurrentBag实现。或者我应该自己实现这个逻辑。@d尝试读写器锁定还是锁定_syncobjectobject对象哪个是理想的?@Fer:ReaderWriterLock在lock上没有太多性能,使用lock会更简单_C#_Multithreading_Static Methods - Fatal编程技术网

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);
    }
}