【问题标题】:F# FSharpMap vs Dictionary performanceF# FSharpMap 与字典性能
【发布时间】:2010-08-03 11:54:55
【问题描述】:

我想知道 F# 不可变 Map 对标准字典的执行情况如何。

我正在编写一个计数函数(针对每个行查找增量集),用于处理具有数百万行和数千个元素的大文件。

内存使用情况如何?

谢谢

【问题讨论】:

    标签: algorithm performance f# dictionary map


    【解决方案1】:

    我想知道 F# 不可变 Map 对标准字典的执行情况如何。

    参见Visual F# 2010 for Technical Computing 第 241-242 页“优化:使用可变数据结构”。显示 Dictionary 运行速度比 Map 快​​ 5-40 倍,在非常相似的设置中计算整数上的频率作为唯一键数量的函数。

    一般来说,像Map 这样的纯函数式数据结构不仅在串行情况下非常慢,而且会破坏整个并行程序的可扩展性。我最近给了a lecture

    顺便说一句,别忘了有一个Seq.countBy 函数!

    【讨论】:

    • 您能否详细说明它们应该如何破坏并行计算的可扩展性?您可以从并发系统中读取数据而不会出现典型错误。唯一让人头疼的是更新策略应该如何
    • 在多核并行环境中纯函数式数据结构的问题在于,它们分配了大量资源,因此对作为单一共享资源的 GC 和 CPU 缓存造成负担。
    • 您假设我们需要使用 GC。您可以在 C 中进行纯函数式编程,因此如果您指的是自动化的,则没有垃圾收集。即便如此,可以实现功能结构以限制与复制相关的开销,并且巧妙地实现它也将提高结构的性能。是的,纯粹的函数式结构确实比命令式的有开销,但它也给你一些简化代码的好处,并且做得好将使大规模并发编程更高效,更不容易出错。这当然取决于我们需要解决的问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-14
    • 2019-04-26
    • 2016-02-13
    相关资源
    最近更新 更多