gpt4 book ai didi

c# - 如何减少对通用缓存存储库中的读者的锁定?

转载 作者:行者123 更新时间:2023-12-03 13:17:01 26 4
gpt4 key购买 nike

我创建了一个通用的CachedRepository,如下所示:

public class CachedRepository<T> : ICachedRepository, IRepository<T> where T : BaseModel, new()
{
private static readonly Lock<T> TypeLock = new Lock<T>();

public void DeleteBatch(IQueryable<T> entities)
{
lock (TypeLock)
{
// delete logic here
}
}

public T GetNoTracking(int id)
{
lock (TypeLock)
{
// fetch by id logic here
}
}
}

通过使用通用对象进行锁定,我将获得每种类型的锁定(即,使用不同类型的线程将不会一个接一个地等待)。但是,此类用于很少更改但大量读取的对象列表,因此使用 lock进行简单锁定将延迟读取器,直到完成另一个读取器为止。

我看过 ReaderWriterLockSlim,但是它不是泛型类,如果使用它,我将失去现在拥有的类型锁定。

问题:如何在保持 lock(generic_type_instance)模式提供的类型锁定的同时减少对读者的锁定?

最佳答案

锁不需要是通用的。对象所包含的类是泛型的,因此对于CachedRepository的每个泛型类型输入,它都将具有不同的静态变量,而不管静态对象是否也是泛型的。只需使用常规的ReaderWriterLockSlim作为静态变量,您的代码就可以正常工作。

关于c# - 如何减少对通用缓存存储库中的读者的锁定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46363794/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com