java - Clojure写文件速度慢

标签 java clojure io leiningen

我们有一个 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 行)

感谢任何帮助!

最佳答案

好吧,在我们编写要共享的代码示例时,我们收到了来自其他来源的一些建议,这些建议已经解决了该问题。

  1. 我们将读取器更改为使用输入流,而不是读取整个文件
  2. 按照 @Reut Sharabani 的建议,我们将 writer 封装在 doall

根本问题似乎是每台机器如何处理惰性

感谢所有回复的人!

关于java - Clojure写文件速度慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59974028/

相关文章:

java - instagram api - 获取完整的用户列表

java - 为什么字符串在 Java 中以 ""开头?

java - 无法在 Mozilla 上打开 Java 应用程序

clojure - 为什么 "(def vowel? (set "aeiou"))"工作?

linux - 当 linux 内核内存负载变高时,对常规文件的读/写性能如何变化?

java - 从文件中读取负数时结束程序

macros - 可以放心地忽略宏和内置宏之间的区别吗?

clojure - 如何在 Clojure 中编写/执行类型操作?

c - 输出文件中不需要的空格

java - FileWriter 未接收所有输入和神秘的悬空换行问题