Как я вытаскиваю лучшую производительность из StreamWriter.NET в C#?

я использую некоторые вложенные разметки в Ruby on Rails, и в одной из разметок у меня есть потребность читать в строке из отделения и установить это как заголовок документа.

корректный способ сделать это находится на стороне сервера.

В Вашем расположении, в какой-то момент будет некоторым кодом, который помещает текст в отделение . Заставьте этот код также установить некоторую переменную экземпляра такой, поскольку @page_title, и затем в Вашем внешнем расположении имеют его, делают <%= @page_title || 'Default Title' %>

6
задан Peter Mortensen 3 June 2015 в 18:22
поделиться

4 ответа

Используйте StringBuilder для объединения текста и открывайте и записывайте в файл только один раз.

0
ответ дан 8 December 2019 в 16:08
поделиться

Удержание одной записи в открытом состоянии будет более эффективным, чем ее многократное открытие и закрытие. Однако, если это критические данные, вы должны вызывать Flush () после каждой записи, чтобы убедиться, что они попадают на диск.

Является ли ваша программа многопоточной? Если это так, вы можете захотеть создать очередь производителя / потребителя - иметь один поток, выбирающий элементы для записи из очереди и записывающий их, тогда другие потоки могут свободно помещать элементы в очередь.

Вы уверены, что у вас действительно есть проблема с производительностью? В наши дни 10 МБ - это довольно мало ... на моем нетбуке все еще требуется секунда или две, чтобы записать 10 МБ (и нет, это не твердотельный накопитель).

15
ответ дан 8 December 2019 в 16:08
поделиться

В обоих сценариях 1 и 2 вы должны спросить себя, требуется ли одновременный доступ к файлу. В этом случае в сценарии 2 StreamWriter не подходит, поскольку он не синхронизирован. В сценарии 1 вы должны открывать каждый StreamWriter таким образом, чтобы получить эксклюзивную блокировку файла.

Предполагая последовательный доступ, я бы никогда не пошел по сценарию 2. Он требует передачи вашего StreamWriter каждому разделу кода, который это нужно. И кто снова отвечает за закрытие писателя. Это быстро станет невозможным.

Сценарий 1 имеет недостаток, заключающийся в том, что вы должны открывать StreamWriter везде, где он вам нужен, что также становится невозможным. Кроме того, теперь в каждом разделе кода нужно знать, где находится файл.

0
ответ дан 8 December 2019 в 16:08
поделиться

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

0
ответ дан 8 December 2019 в 16:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: