открывает файл поток дорогостоящей операцииоткрывает файл поток дорогостоящая операция
Я хотел бы, чтобы обеспечить ленивую функциональность загрузки в классе, который читает структурированный файл. Каждый элемент файла имеет заголовок и полезную нагрузку.
идея заключается в том, чтобы загружать только заголовки из файла и получить доступ к данным полезной нагрузки только тогда, когда Релевент поле Доступ
прототип класса будет выглядеть следующим образом в 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;
}
}
}
Будет ли операция открытия файла и получения полезной нагрузки дорогостоящей, особенно в контексте, где полезная нагрузка будет представлять аудио- или видеоданные.
У меня не было времени попробовать еще (и нам это действительно не нужно сейчас), я думал о том, чтобы реализовать это как этот случай, чтобы позволить фильтру в большом файле, например получение всего ключевого кадра из файла будет выглядеть так: var keyframes = ListElements.Where (e => e.IsKeyframe); , и это не вызвало бы загрузку всего кадра в целом –
Так что это означало бы загрузку каждого кадра отдельно, открытие и закрытие файла много тысяч раз? Это может быть значительная стоимость. –