Является ли открытие файлового потока дорогостоящей операцией - PullRequest
0 голосов
/ 12 октября 2009

Является ли открытие потока файлов дорогостоящей операцией

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

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

прототип класса будет выглядеть в C #

public class OneElement
{
     public Header TheHeader {get; private set;}

     private string _FileName;

     private long _StreamPosition; // this value is initialized when the header is read

     private Payload _ThePayload;


     public Payload ThePayload
     {
         get{
                    if (_ThePayload == null)
                        using (var stream = File.OpenRead(_FileName) )
                        {
                             stream.seek(_StreamPosition,SeekOrigin.Begin); // seek to the relevent position
                             _ThePayload =  ReadPayload(stream); // this method return the paylod read reads from the current position
                        }
                    return _ThePayload;

               }
     }
} 

Будет ли операция открытия файла и получения полезной нагрузки дорогостоящей, особенно в контексте, где полезная нагрузка будет представлять аудио- или видеоданные

Ответы [ 2 ]

3 голосов
/ 12 октября 2009

Если вы читаете аудио / видео, то я ожидаю, что вы будете читать довольно много данных. Это увеличит стоимость всего лишь открытия файла. Однако чтение больших объемов данных с диска обычно является дорогостоящей операцией.

С другой стороны, если вы просто читали несколько байтов за раз, то многократное открытие / закрытие файла не было бы хорошей идеей - было бы лучше прочитать большие порции и соответствующим образом их кэшировать.

У вас есть эталон для этого? Как это работает в данный момент? Если все работает нормально, есть ли у вас основания подумать о более сложной системе?

1 голос
/ 12 октября 2009

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

Так что, если вы пытаетесь кешировать содержимое, чтобы сохранить один открытый файл, забудьте об этой идее.

...