Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我想缓存对Sqrt()调用的结果,为了提高效率,应该使用哪个集合?_C#_Caching_Dictionary_Sqrt - Fatal编程技术网

C# 我想缓存对Sqrt()调用的结果,为了提高效率,应该使用哪个集合?

C# 我想缓存对Sqrt()调用的结果,为了提高效率,应该使用哪个集合?,c#,caching,dictionary,sqrt,C#,Caching,Dictionary,Sqrt,在我的应用程序中,我计算原子距离,这必须是精确的。据我所知,唯一精确的方法是使用平方根函数。但是,使用平方根函数在我的应用程序中造成了瓶颈 应用程序处理的数据将在将来多次重新处理,因此缓存sqrt()的结果可能会在第一次运行后提高性能,但前提是使用了正确的高效集合类型。集合中可能存储了大约20000个sqrt结果 我正在考虑存储查询编号“d”和sqrt()结果的字典。这是最好的解决方案,不同的集合会更好吗,还是我应该专门为任务实现一个集合?鉴于字典是O(1)缓存sqrt()的最佳可能性resul

在我的应用程序中,我计算原子距离,这必须是精确的。据我所知,唯一精确的方法是使用平方根函数。但是,使用平方根函数在我的应用程序中造成了瓶颈

应用程序处理的数据将在将来多次重新处理,因此缓存sqrt()的结果可能会在第一次运行后提高性能,但前提是使用了正确的高效集合类型。集合中可能存储了大约20000个sqrt结果


我正在考虑存储查询编号“d”和sqrt()结果的字典。这是最好的解决方案,不同的集合会更好吗,还是我应该专门为任务实现一个集合?

鉴于
字典
是O(1)缓存
sqrt()的最佳可能性
results.

在相同的数字上运行一个平方根的可能性有多大,它值得缓存?内存使用量可能会非常大,以获得最小的性能增益。答案可能是测试在您的具体场景中什么更快。@DLeh可能性是100%,因为相同的数据(原子x、y、z坐标)将被多次重复用于多个不同的任务。这里的一个危险是字典使用哈希代码查找键,并且,由于哈希代码不同,用于计算密钥的双精度计算中的任何类型的不一致都可能导致查找失败。如果仅由一个线程访问,则将其存储在
字典中;如果需要跨多个线程使用,则将其存储在
ConcurrentDictionary中。对于20k个元素,我不会担心,因为查找是在O(1)中完成的。@Aalawlx:non-concurrent dictionary。不太确定并发版本。