ObjectPool 대상 풀 디자인 모델
소스 코드 구조, 모델 분석:
3 대 기본 대상:
public class DefaultObjectPoolProvider : ObjectPoolProvider
{
///
/// The maximum number of objects to retain in the pool.
///
public int MaximumRetained { get; set; } = Environment.ProcessorCount * 2;
///
public override ObjectPool Create(IPooledObjectPolicy policy)
{
if (policy == null)
{
throw new ArgumentNullException(nameof(policy));
}
if (typeof(IDisposable).IsAssignableFrom(typeof(T)))
{
return new DisposableObjectPool(policy, MaximumRetained);
}
return new DefaultObjectPool(policy, MaximumRetained);
}
}
IPooled ObjectPolicy 인 터 페 이 스 는 대응 하 는 추상 적 인 클래스 와 기본 적 인 구현 이 있 으 며, 대상 탱크 의 대상 (즉 탱크 대상) 의 생 성 또는 이 정책 클래스 로 되 돌아 가 제어 합 니 다.
public override T Get()
{
var item = _firstItem;
if (item == null || Interlocked.CompareExchange(ref _firstItem, null, item) != item)
{
var items = _items;
for (var i = 0; i < items.Length; i++)
{
item = items[i].Element;
if (item != null && Interlocked.CompareExchange(ref items[i].Element, null, item) == item)
{
return item;
}
}
item = Create();
}
return item;
}
// Non-inline to improve its code quality as uncommon path
[MethodImpl(MethodImplOptions.NoInlining)]
private T Create() => _fastPolicy?.Create() ?? _policy.Create();
public override void Return(T obj)
{
if (_isDefaultPolicy || (_fastPolicy?.Return(obj) ?? _policy.Return(obj)))
{
if (_firstItem != null || Interlocked.CompareExchange(ref _firstItem, obj, null) != null)
{
var items = _items;
for (var i = 0; i < items.Length && Interlocked.CompareExchange(ref items[i].Element, obj, null) != null; ++i)
{
}
}
}
}
= = 전체적인 디자인 사고방식 에서 볼 때 공급 자 Provider 는 구체 적 인 대상 탱크 를 제공 하 는데 들 어 오 는 매개 변수 도 전략 클래스 이 고 전략 클래스 는 제어 탱크 대상 을 구체 적 으로 처리한다.dotnet core 의 많은 소스 코드 개발 모델 은 다음 과 같 습 니 다. Policy 를 통 해 Provider 를 구축 하고 Provider 를 통 해 최종 클래스 를 만 듭 니 다.즉, 전략 류 만 을 통 해 사용자 정의 확장 을 실현 하 는 구조 로 참고 하고 사고 할 수 있다. =
공식 실현:
Object reuse with ObjectPool in ASP.NET Core
예시 참조:
. NET Core 에서 Object Pool 의 간단 한 사용
. Net 코어 중의 ObjectPool
. NET Core 3.0 의 깊이 있 는 소스 코드 이해 ObjectPool (2)
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.