gpt4 book ai didi

c# - 字典 ArgumentException 日志重复键 : which is more performant?

转载 作者:行者123 更新时间:2023-11-30 17:33:04 25 4
gpt4 key购买 nike

这里我向字典添加了一些内容:

dictionary.Add(dictionaryKey, value);

如果 dictionaryKey 已经存在,将抛出 ArgumentException。它的信息相当通用:

An item with the same key has already been added.

如果我对 dictionary.Add 的调用是在循环或辅助函数内,则很难立即判断已经添加了哪个键引发了此异常。我想尽快轻松地知道这一点。

有几个选项。

1)

if(dictionary.ContainsKey(dictionaryKey)
{
throw new ArgumentException($"An item with the same key ({dictionaryKey}) has already been added.");
}

dictionary.Add(dictionaryKey, value);

2)

try
{
dictionary.Add(dictionaryKey, value);
}
catch(ArgumentException argumentException)
{
throw new ArgumentException($"An item with the same key ({dictionaryKey}) has already been added.");
}

3) 其他方式

我知道设置 try/catch block 会影响性能,但似乎运行 dictionary.ContainsKey(dictionaryKey) 也意味着每次都要进行额外的查找。以下哪个选项的性能最高?

最佳答案

不确定此代码的上下文落入何处,但就性能而言,这将取决于您是否期望重复的 dictionaryKey

如果要重复,我会使用第一种方法,因为 ContainsKey 是一个 O(1) 操作,而 try/catch 引发 small performance penalty如果用于处理控制流。据推测,这个惩罚会大于 O(1)。

但是,如果您可以保证没有重复的 dictionaryKey,则第二种方法会更快。 try/catch 性能损失仅在抛出异常(发现重复键)时发生。第一种方法将对 ContainsKey 执行不必要的调用。当然,这意味着您不需要首先将代码包装在 try/catch 中,这违背了您提出问题的目的。

我会选择第一种方法。

关于c# - 字典 ArgumentException 日志重复键 : which is more performant?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44850359/

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