我有一个服务器,处理多个传入的socket连接并创建2个不同的线程以XML格式存储数据。
我几乎在每个异步调用的事件处理程序以及代码不同部分的两个线程中都使用了lock
语句来保证线程安全。可悲的是,使用这种方法会导致我的应用程序显着减速。
我尝试了不使用lock
,服务器执行非常快,甚至文件存储似乎得到了提升;但是程序在工作30秒至1分钟后因我不理解的原因崩溃了。
所以,我认为最好的方法是尽可能少地使用锁或仅在绝对必要的情况下使用它。 因此,我有两个问题:
当我只写入公共访问的变量(C#列表)时,是否需要锁定,还是在读取时也需要?
在由套接字处理程序创建的异步线程中是否只需要锁定,还是在其他地方也需要?
有人能给我一些实用的指南,告诉我如何操作。 这次我不会发布整个代码了。 发布大约2500行的代码没有任何意义。