我们有一个 Clojure 应用程序,它获取数据集(约 3000 行)并使用 spit 将其写入本地文件。它在编写它的机器上运行得很好,但在其他所有拉取 git 代码的机器上,写入步骤都慢得令人痛苦。该过程在原始机器上需要几秒钟,但在其他机器上需要十分钟以上。
有问题的两台主要机器(开发人员的机器和我的机器)都是 Manjaro Arch Linux 系统,具有相似的规范和配置。我们都从同一个 Git 源中提取数据,并且都提取相同的数据。
我们已经确认代码仍然可以在我的机器上运行,因为如果我尝试仅写入数据集的前十行(即使仍然需要将近一分钟),它就会完成。
在此过程中,两台计算机上的 CPU 和 RAM 几乎没有接触,并且输出文件大小小于 1 MB。
如果我们使用 Java.io 库和 clojure.data.csv 或 dk.ative.docjure.spreadsheet 而不是 spit,我们也会遇到同样的问题。
抽象的数据形状是:
[["Name" "Price"]
["Foo Widget" 100]
["Bar Widget" 200]]
(但当然大于 3000 行)
感谢任何帮助!
最佳答案
好吧,在我们编写要共享的代码示例时,我们收到了来自其他来源的一些建议,这些建议已经解决了该问题。
- 我们将读取器更改为使用输入流,而不是读取整个文件
- 按照 @Reut Sharabani 的建议,我们将 writer 封装在
doall
中
根本问题似乎是每台机器如何处理惰性
感谢所有回复的人!
关于java - Clojure写文件速度慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59974028/