Lisp 逐步构建大文本块,然后将其写入文件

Lisp 逐步构建大文本块,然后将其写入文件,lisp,common-lisp,Lisp,Common Lisp,我是CommonLisp新手,正在尝试构思生成大型文本文件的最佳方法。我基本上有两种选择: 创建一个字符串并不断添加,然后将该字符串写入 文件输出流只有一次,仅在迭代的最后一次 创建一个文件流,并在程序构建文本文件时不断地反复写入 也许与1类似的是: 3.创建一个字符串输出流并写入该流,然后将该流写入一个新的文件流 1和3的问题是,我不认为字符串设计用于容纳非常大的文本内容,是吗 2的问题是,不断地打开和关闭文件似乎是浪费,即使使用with-命令方便地打开和关闭文件也是如此;似乎效率低下,而且可

我是CommonLisp新手,正在尝试构思生成大型文本文件的最佳方法。我基本上有两种选择:

  • 创建一个字符串并不断添加,然后将该字符串写入 文件输出流只有一次,仅在迭代的最后一次
  • 创建一个文件流,并在程序构建文本文件时不断地反复写入
  • 也许与1类似的是: 3.创建一个字符串输出流并写入该流,然后将该流写入一个新的文件流

    1和3的问题是,我不认为字符串设计用于容纳非常大的文本内容,是吗

    2的问题是,不断地打开和关闭文件似乎是浪费,即使使用
    with-
    命令方便地打开和关闭文件也是如此;似乎效率低下,而且可能容易出错


    典型的做法是什么?

    打开文件流,在所有工作中保持打开状态,然后关闭文件流,必要时移动到另一个流。无需不断地重新打开和关闭文件。

    打开文件流,只需在所有工作中保持它的打开状态,然后关闭它并在必要时移动到另一个流。无需经常重新打开和关闭文件。

    2的效率有多低?这不是日志记录通常是如何完成的吗?但是,如果您执行1,并且您对内容的大小有一些想法,那么您可以从一开始就将字符串设置得足够大(事实上,您可以将其与3结合起来;您可以创建写入特定字符串的字符串输出流),然后在最后写出来。你不需要打开和关闭文件,对吗?你不能打开这个文件并保持它打开直到你完成它吗?如果没有别的,你可以有一个哈希表映射路径名到流。只要在你需要的时候把它拉上来,写一些东西,然后继续下一个任务。之后一定要把它们都关上。:)快速的
    (时间(打开文件(s“test.txt”:方向:输出:如果不存在:创建:如果存在:追加)(格式s“test string”))
    给我的平均时间为270-300微秒。在我看来,在尝试优化一些可能不成问题的东西之前,你应该先进行测量。先打开再关闭。如果速度太慢,让水流保持畅通。2的效率有多低?这不是日志记录通常是如何完成的吗?但是,如果您执行1,并且您对内容的大小有一些想法,那么您可以从一开始就将字符串设置得足够大(事实上,您可以将其与3结合起来;您可以创建写入特定字符串的字符串输出流),然后在最后写出来。你不需要打开和关闭文件,对吗?你不能打开这个文件并保持它打开直到你完成它吗?如果没有别的,你可以有一个哈希表映射路径名到流。只要在你需要的时候把它拉上来,写一些东西,然后继续下一个任务。之后一定要把它们都关上。:)快速的
    (时间(打开文件(s“test.txt”:方向:输出:如果不存在:创建:如果存在:追加)(格式s“test string”))
    给我的平均时间为270-300微秒。在我看来,在尝试优化一些可能不成问题的东西之前,你应该先进行测量。先打开再关闭。如果太慢,保持水流畅通。