Замените текст в файле, но быстрее

#c# #string #filestream

Вопрос:

Поэтому я создал программу для решения математических задач, которая в основном считывает одно число из текстового файла (единственное число в этом текстовом файле) и заменяет его числом 1, если число не является решением. Теперь проблема в том, что если я добавлю текст только в следующую строку, используя

 sw.WriteLine(text);
 

это делает вычисления действительно быстрыми, делая более 100 тысяч чисел за несколько секунд, но это просто добавление числа в текстовый файл без удаления предыдущего.

В качестве альтернативы я использовал

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

но из-за этого моя программа работала значительно медленнее.

Есть ли способ заменить текст в файле .txt с помощью уже открытого потока файлов?

Я новичок в c#, поэтому вся моя программа по сути является Франкенштейном кода.

Комментарии:

1. проблема в том, что при хранении чисел в виде текста они занимают разное количество байтов. Если вы замените «9» на «10», вам нужно переписать остальную часть файла, чтобы освободить место для 1 символа.

2. Возможно, вопрос в следующем: почему вы храните его в файле? Если вы хотите часто обновлять такое значение, то файл, вероятно, не тот вариант хранения, который вы ищете.

3. Это большой математический расчет, который должен найти правильное число, и я использую файл для хранения следующего числа, необходимого для запуска, потому что я выключаю свой компьютер на ночь. В настоящее время их число составляет около 200 триллионов

4. @ChuftiMeatball Простой плоский текстовый файл-не единственный формат, который может пережить перезагрузку компьютера. Примеры поиска, такие как база данных или постоянный кэш. Или, возможно, реструктурируйте свои файлы, чтобы избежать необходимости вносить небольшие изменения в большой файл.

5. Просто [BinaryWriter].Write([some string]); [BinaryWriter].BaseStream.Position = 0; ? Или что-то в этом роде. Если вам действительно нужно писать этот BigInteger каждый раз, когда вы его создаете (вероятно, лучше написать буфер вместо строки).

Ответ №1:

Я использую файл для хранения следующего номера, необходимого для запуска, потому что я выключаю компьютер на ночь.

Честно говоря, самое быстрое решение для этого заключается в следующем: прочитайте файл один раз, выполните несколько (например, 100) вычислений без сохранения, а затем сохраните текущее число обратно в файл. Настройте интервал так, чтобы текущее состояние сохранялось примерно каждые 5 секунд.

Это дает вам все еще хорошую отправную точку (не более 5 секунд потерянной работы), но также уменьшает ввод-вывод диска до такой степени, что это больше не замедлит вычисления.