gpt4 book ai didi

c# - 为什么 LightInject 使用 ImmutableHashTree 来存储注册,而不是简单的字典?

转载 作者:行者123 更新时间:2023-11-30 22:05:13 24 4
gpt4 key购买 nike

我正在查看多个 IoC 包含以便选择一个用于我的工作,并查看 LightInject 的代码库我遇到了一些我不明白的东西......

在 ServiceContainer 的 GetInstance(Type serviceType, string serviceName) 中方法,它从参数中形成一个键并在“namedDelegates”上调用“Search”:

var key = Tuple.Create(serviceType, serviceName);
var instanceDelegate = namedDelegates.Search(key);

namedDelegates 是一个 ImmutableHashTree<TKey, TValue> ,一个实现(来自其自己的评论)的内部类:

/// A balanced binary search tree implemented as an AVL tree.

我关注 LightInject 的原因是它在 Daniel Palme's IoC Performance Comparison 中的优异成绩我很困惑为什么在这种情况下 O(log n) 二进制搜索算法比使用 O(1) 字典更可取?

有人可以在这里教我吗?

最佳答案

没用过,随便看看源码

我的理论是,无论是从 API 的角度还是从消费开发人员的角度来看,都可以根据需要使用重复的 key 。 Search(TKey)处理检查它在树中找到的重复项,这就是导致我这样做的原因。

另一个也可能是为了性能——正如您在问题中提到的那样,它看起来非常快。他们在 ImmutableHashTree 上搜索优雅地处理找不到值的问题,因为它只返回 default(TValue) .

这似乎比下面的 Dictionary<TKey, TValue> 更快它已经在做很多相同的工作来根据给定的键找到你的值(value)。

if (myDictionary.ContainsKey(myKey))
return myDictionary[myKey]; // Practically double the work has been done
else
return default(TValue);


try
{
return myDictionary[myKey];
}
catch(Exception ex)
{
// Exceptions can be expensive.
return default(TValue);
}

他们的方法只搜索一次,不用担心捕获异常来处理 key 不存在的事实。

同样,这是我收集的,只是快速浏览了源代码,不应将其视为具体内容。

关于c# - 为什么 LightInject 使用 ImmutableHashTree 来存储注册,而不是简单的字典?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24519004/

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