【问题标题】:Replace the text in a file, but faster替换文件中的文本,但速度更快
【发布时间】:2021-08-03 17:12:27
【问题描述】:

所以我制作了一个数学问题程序,它基本上从文本文件中读取一个数字(该文本文件中的唯一数字),如果数字不是解决方案,则将其替换为数字+1。 现在的问题是,如果我只在下一行添加一个文本使用

sw.WriteLine(text);

这使得计算速度非常快,在几秒钟内完成了 100k+ 个数字,但它只是将数字添加到文本文件中而不删除之前的。

我也用过

 string[] lines = File.ReadAllLines("numbers.txt");
 foreach (string line in lines)
 {
      lines[0] = Convert.ToString(biginta);
 }                     
            File.WriteAllLines("numbers.txt", lines);
            

但这使我的程序运行得相当慢。

有没有办法使用已经打开的文件流替换 .txt 文件中的文本?

我是 C# 新手,所以我的整个程序基本上是代码的科学怪人。

【问题讨论】:

  • 问题是,将数字存储为文本时,它们占用的字节数不同。如果将“9”替换为“10”,则需要重写文件的其余部分,以便为 1 个字符腾出空间。
  • 也许问题是:你为什么将它存储在一个文件中?如果您想经常更新这样的值,那么文件可能不是您要查找的存储选项。
  • 这是一个很大的数学计算,必须找到正确的数字,我正在使用一个文件来存储下一个需要运行的数字,因为我在一夜之间关闭了我的电脑。目前的数字约为 200 万亿
  • @ChuftiMeatball 一个简单的平面文本文件并不是唯一可以在机器重启后仍然存在的格式。查找示例,例如数据库或持久缓存。或者也许重组你的文件以避免在一个大文件中改变一点点。
  • 只是[BinaryWriter].Write([some string]); [BinaryWriter].BaseStream.Position = 0;?或者类似的东西。如果你真的需要每次生成一个 BigInteger 时都写这个(最好写一个缓冲区而不是字符串)。

标签: c# string filestream


【解决方案1】:

我正在使用一个文件来存储下一个需要运行的数字,因为我一夜之间关闭了我的电脑。

老实说,最快的解决方案如下:读取文件一次,在不保存的情况下进行几次(如 100)计算,然后将当前数字存储回文件中。 调整间隔,以便您每 5 秒左右存储一次当前状态。

这仍然为您提供了一个良好的起点(最多 5 秒丢失工作),但也将磁盘 IO 减少到不再减慢计算速度的程度。

【讨论】:

    猜你喜欢
    • 2011-05-06
    • 2012-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-14
    • 2021-04-04
    • 2010-10-29
    相关资源
    最近更新 更多