1

リソースにアクセスするための ReaderWriterLockSlim オブジェクトのディクショナリを維持しました: (サンプル コードはここでは見苦しく、私の目的を理解してもらうだけです)

static ConcurrentDictionary<string, ReaderWriterLockSlim> rwResourceLocks =
                                new ConcurrentDictionary<string, ReaderWriterLockSlim>();

そして、次のように使用します:

if (ResourceStore.Exist("resourceID")) {
    if (rwResourceLocks["resourceID"] == null) {
        /* create a new lock in thread-safe way */
    }
    rwResourceLocks["resourceID"].EnderReadLock();
    var rc = ResourceStore.GetResource("resourceID");
    /* further use of rc... */
    rwResourceLocks["resourceID"].ExitReadLock();    
}

リソースは動的に追加または削除される可能性があり、そのライフサイクルは予測できません (リソースの削除を監視できません)。リソースの量が増えると、rwResourceLocks のサイズも大きくなり、メモリの問題が発生します。この問題を解決する方法はありますか? (明らかに、これを行うために単純に rwResourceLocks.Clear() を呼び出すことはできません)

私はそれが少し複雑であることを知っています:(

4

1 に答える 1