ASP.NET,C#:在一个部分周围放置锁块

ASP.NET,C#:在一个部分周围放置锁块,c#,asp.net,multithreading,C#,Asp.net,Multithreading,我打算使用lock()块绕过现有代码段(更新哈希表),以防止多个线程(由ASP.NET网站启动)同时更新哈希表 这是我第一次这样做,我需要你的建议 由lock()引起的任何性能开销警告 与此场景类似的任何其他问题 非常感谢您的建议。锁没问题,更好的方法是ReaderWriterLock(Slim)。这允许在using块中使用。锁可以,更好的方法是ReaderWriterLock(Slim)。它允许在using块中使用。lock()的最佳实践是确保锁定私有静态对象(请参阅了解原因)。我也强烈建议在

我打算使用lock()块绕过现有代码段(更新哈希表),以防止多个线程(由ASP.NET网站启动)同时更新哈希表

这是我第一次这样做,我需要你的建议

  • lock()引起的任何性能开销警告
  • 与此场景类似的任何其他问题

  • 非常感谢您的建议。

    锁没问题,更好的方法是ReaderWriterLock(Slim)。这允许在using块中使用。

    锁可以,更好的方法是ReaderWriterLock(Slim)。它允许在using块中使用。

    lock()的最佳实践是确保锁定私有静态对象(请参阅了解原因)。我也强烈建议在走这条路之前先阅读

    通常情况下,lock()的性能开销要比它阻塞的线程数量和频率少。您应该确保了解应用程序的配置文件,以便将锁定行为最小化

    我强烈建议您进行简单的数据存储和更新,因为它已经有一个字典和用于这种同步存储的特定方法。应用程序已经有了
    Lock()
    Unlock()
    方法,这些方法是为处理线程阻塞和故障恢复而构建的,而不存在通过滚动自己的同步代码可能遇到的AppDomain相关问题。例如:

    Application.Lock();
    Application["SomeGlobalCounter"] = (int)Application["SomeGlobalCounter"] + 1;
    Application.UnLock();
    
    lock()的最佳实践是确保锁定私有静态对象(请参阅了解原因)。我也强烈建议在走这条路之前先阅读

    通常情况下,lock()的性能开销要比它阻塞的线程数量和频率少。您应该确保了解应用程序的配置文件,以便将锁定行为最小化

    我强烈建议您进行简单的数据存储和更新,因为它已经有一个字典和用于这种同步存储的特定方法。应用程序已经有了
    Lock()
    Unlock()
    方法,这些方法是为处理线程阻塞和故障恢复而构建的,而不存在通过滚动自己的同步代码可能遇到的AppDomain相关问题。例如:

    Application.Lock();
    Application["SomeGlobalCounter"] = (int)Application["SomeGlobalCounter"] + 1;
    Application.UnLock();
    

    除了上面的海报之外,我建议阅读关于

    的内容除了上面的海报之外,我建议阅读关于

    的内容,我认为这是对这个问题的一种重复,我认为这是对这个问题的一种重复@Marc,@ssg:Hashtable类对于多个读者和一个作者来说是线程安全的,因此,在这种情况下,
    RWL
    /
    RWLS
    可能是过火了。在任何编写器代码周围使用标准的
    ,都可以达到这一目的,并提供更好的性能。(注意,这只适用于非泛型的
    哈希表
    类,而不适用于
    字典
    等)不太清楚在什么情况下需要ReaderWriterLockSlim。我只是在代码更新哈希表周围加了锁;没有关于读取它的代码锁定。@Marc,@ssg:Hashtable类对于多个读卡器和一个写卡器是线程安全的,因此在这种情况下,
    RWL
    /
    RWLS
    可能会有过大的杀伤力。在任何编写器代码周围使用标准的
    ,都可以达到这一目的,并提供更好的性能。(注意,这只适用于非泛型的
    哈希表
    类,而不适用于
    字典
    等)不太清楚在什么情况下需要ReaderWriterLockSlim。我只是在代码更新哈希表周围加了锁;没有关于读取的锁定代码。不知道什么情况需要ReaderWriterLockSlim。我只是在代码更新哈希表周围加了锁;没有关于读取的锁定代码。不知道什么情况需要ReaderWriterLockSlim。我只是在代码更新哈希表周围加了锁;没有关于阅读的锁定代码。