gpt4 book ai didi

c# - 如何提高 C# 中 ConcurrentDictionary.Count 的性能

转载 作者:行者123 更新时间:2023-12-03 23:22:58 34 4
gpt4 key购买 nike

最近,我需要在使用 SortedDictionary 之间做出选择。和 SortedList ,并选择了 SortedList .

但是,现在我发现我的 C# 程序在执行 SortedList.Count 时速度变慢了,我使用调用了数千次的函数/方法进行了检查。

通常我的程序会在 35 毫秒内调用该函数 10,000 次,但是在使用 SortedList.Count 时,它减慢到 300-400 毫秒,基本上慢了 10 倍。

我也试过 SortedList.Keys.Count ,但这使我的性能又降低了 10 倍,超过 3000 毫秒。
I have only ~5000 keys/objects in SortedList<DateTime, object_name> .
我可以通过 SortedList[date] (in 35 ms) 从我的排序列表中轻松即时地检索数据,所以我没有发现列表结构或其持有的对象有任何问题。

这种表现正常吗?

我还能用什么来获取列表中的记录数,或者只是检查列表是否已填充?
(除了添加一个单独的跟踪标志,我现在可以这样做)

更正:
抱歉,我实际上正在使用:ConcurrentDictionary<string, SortedList<DateTime, string>> dict_list = new ConcurrentDictionary<string, SortedList<DateTime, string>>();我在不同的地方有不同的计数,有时检查列表中的项目,有时检查 ConcurrentDicitonary。所以这个问题适用于 ConcurrentDicitonary,我编写了快速测试代码来确认这一点,这需要 350 毫秒,而不使用并发。
这是 ConcurrentDicitonary 的测试,显示 350 毫秒:

public static void CountTest()
{
//Create test ConcurrentDictionary
ConcurrentDictionary<int, string> test_dict = new ConcurrentDictionary<int, string>();
for (int i = 0; i < 50000; i++)
{
test_dict[i] = "ABC";
}

//Access .Count property 10,000 times
int tick_count = Environment.TickCount;
for (int i = 1; i <= 10000; i++)
{
int dict_count = test_dict.Count;
}

Console.WriteLine(string.Format("Time: {0} ms", Environment.TickCount - tick_count));
Console.ReadKey();
}

最佳答案

article建议改为调用它:

dictionary.Skip(0).Count()

The count could be invalid as soon as the call from the method returns. If you want to write the count to a log for tracing purposes, for example, you can use alternative methods, such as the lock-free enumerator

关于c# - 如何提高 C# 中 ConcurrentDictionary.Count 的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41298156/

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