打开文件流是一项代价高昂的操作
我想在读取结构化文件的类中提供延迟加载功能。 该文件的每个元素都有一个标题和一个有效负载。
这个想法是只加载文件中的头文件,并且仅在文件时访问有效载荷数据 访问相关领域
该类的原型在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;
}
}
}
打开文件和获取有效负载的操作是否成本高昂,尤其是在有效负载将代表音频或视频数据的环境中
答案 0 :(得分:3)
如果您正在阅读音频/视频,那么我希望您阅读相当多的数据。这会使打开文件的成本相形见绌。但是,从磁盘读取大量数据通常是一项代价高昂的操作。
另一方面,如果你只是一次读取几个字节,那么重复打开/关闭文件不是一个好主意 - 最好是阅读大块并适当地缓存它们。
你有基准吗?它目前如何表现?如果它工作正常,你有没有理由试着考虑一个更复杂的系统?
答案 1 :(得分:1)
打开文件确实需要花费一些资源。但是,如果你的有效载荷是音频或视频,那么读取它们将比打开文件更加耗费资源。
因此,如果您尝试缓存内容以保存单个文件,请忘记该想法。