公司使用的文件缓存经常出现大量的并发冲突,主要原因有两个:一个是读取文件时刚好文件被删除了,这样会抛出找不到文件的异常; 另一个是资源权限争抢的问题,可能会导致没有权限操作的情况。
    ReaderWriterLock类实现了多用户读/单用户写的同步访问机制,可以使用此类对文件的读写进行加锁操作,因为文件缓存一般是大量读少量写的情况,所以非常适合使用ReaderWriterLock。
    1、读缓存文件时使用AcquireReaderLock方法,并设置1000ms超时操作。
使用ReaderWriterLock优化文件缓存        private string readfile(string filename)
        }

2、添加缓存文件时使用AcquireWriterLock方法获取写锁。
使用ReaderWriterLock优化文件缓存        public void Add(string key, object value)
        }

3、在删除缓存文件时也通过AcquireWriterLock获取写锁。
使用ReaderWriterLock优化文件缓存        public void Remove(string key)
        }

另外还写了一个测试程序对优化了的文件缓存进行并发访问测试。
使用ReaderWriterLock优化文件缓存//#define usetry
使用ReaderWriterLock优化文件缓存
using System;
使用ReaderWriterLock优化文件缓存
using System.Collections.Generic;
使用ReaderWriterLock优化文件缓存
using System.Text;
使用ReaderWriterLock优化文件缓存
using System.Threading;
使用ReaderWriterLock优化文件缓存
using System.Diagnostics;
使用ReaderWriterLock优化文件缓存
namespace CJB.Caching.FileSystem.Test
}

测试使用了Interlocked类来同步记录总共的读写次数,使用lock来同步记录总共耗时。
注意使用Thread.Sleep(10);可以保证测试程序的并发量,防止在一个非常小的一个时间片中就耗掉大量的测试操作。

相关文章:

  • 2021-06-29
  • 2021-09-07
  • 2021-12-06
  • 2022-02-14
  • 2021-05-23
  • 2022-12-23
  • 2021-05-26
  • 2021-11-05
猜你喜欢
  • 2022-12-23
  • 2022-01-18
  • 2021-10-16
  • 2022-12-23
  • 2022-03-06
  • 2022-12-23
相关资源
相似解决方案