相关疑难解决方法(0)

.NET异常有多慢?

我不想讨论何时抛出异常而不抛出异常.我想解决一个简单的问题.99%的时间不抛出异常的论点围绕着它们缓慢而另一方声称(基准测试)速度不是问题.我读过很多关于一方或另一方的博客,文章和帖子.那是哪个呢?

答案中的一些链接:Skeet,Mariani,Brumme.

.net c# performance exception

143
推荐指数
4
解决办法
3万
查看次数

C#中的例外有多贵?

C#中的例外有多贵?只要堆叠不深,它们似乎并不是非常昂贵; 但我读过相互矛盾的报道.

有没有被反驳的确定性报告?

c# exception

70
推荐指数
5
解决办法
3万
查看次数

包含密钥VS尝试捕获

我有一个Vector2的生成列表我必须检查一个字典,看看它们是否存在,这个函数每次滴答都会被执行.

这样做会跑得最快/做得更好?

    public static bool exists(Vector2 Position, Dictionary<Vector2, object> ToCheck)
    {
        try
        {
            object Test = ToCheck[Position];
            return (true);
        }
        catch 
        {
            return (false);
        }           
    }
Run Code Online (Sandbox Code Playgroud)

或者我应该坚持常态?

    public static bool exists(Vector2 Position, Dictionary<Vector2, object> ToCheck)
    {
        if (ToCheck.ContainsKey(Position))
        {
            return (true);
        }
        return (false);
    }
Run Code Online (Sandbox Code Playgroud)

谢谢你输入:)

旁注:(此时密钥的值无关紧要,或者我将使用TryGetValue而不是ContainsKey)

c# dictionary try-catch containskey

8
推荐指数
2
解决办法
3318
查看次数

如何更新字典中键的值,但前提是该键已经存在,而不需要对键进行两次哈希处理?

我有一个Dictionary<string, decimal>具有固定数量的条目,并且我想经常更新它的许多值,但仅限于已经存在的键。如果字典中尚不存在某个键,我不想添加它,因为我的目标是将字典限制为固定大小。因此,下面的代码(使用set 索引器)将无法满足我的需求:

dictionary[key] = newValue;
Run Code Online (Sandbox Code Playgroud)

key如果它已经存在,此代码将更新它的值,或者如果它不存在,它将插入一个新的键/值对。那不是我想要的。所以我TryUpdate为该类编写了一个扩展方法Dictionary<TKey, TValue>,具有理想的行为:

public static bool TryUpdate<TKey, TValue>(
    this Dictionary<TKey, TValue> source,
    TKey key, TValue value)
{
    ArgumentNullException.ThrowIfNull(source);
    if (!source.ContainsKey(key))
        return false;
    source[key] = value;
    return true;
}
Run Code Online (Sandbox Code Playgroud)

现在我的代码按预期工作:

dictionary.TryUpdate(key, newValue);
Run Code Online (Sandbox Code Playgroud)

我不喜欢上述实现的是,如果密钥已经存在(这是我的场景中的常见情况),则密钥将在每个TryUpdate操作中被哈希两次。因此,为了保证我的字典不会增长超过其初始大小,我将在性能方面付出双倍的代价。键是长字符串,因此哈希成本很高。有没有办法重写我的TryUpdate方法,使其与set索引器一样高效?

c# performance dictionary hashcode .net-6.0

6
推荐指数
1
解决办法
1406
查看次数