打开文件流是一项代价高昂的操作

时间:2009-10-12 19:34:40

标签: .net file-io lazy-loading

打开文件流是一项代价高昂的操作

我想在读取结构化文件的类中提供延迟加载功能。 该文件的每个元素都有一个标题和一个有效负载。

这个想法是只加载文件中的头文件,并且仅在文件时访问有效载荷数据 访问相关领域

该类的原型在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 个答案:

答案 0 :(得分:3)

如果您正在阅读音频/视频,那么我希望您阅读相当多的数据。这会使打开文件的成本相形见绌。但是,从磁盘读取大量数据通常是一项代价高昂的操作。

另一方面,如果你只是一次读取几个字节,那么重复打开/关闭文件不是一个好主意 - 最好是阅读大块并适当地缓存它们。

你有基准吗?它目前如何表现?如果它工作正常,你有没有理由试着考虑一个更复杂的系统?

答案 1 :(得分:1)

打开文件确实需要花费一些资源。但是,如果你的有效载荷是音频或视频,那么读取它们将比打开文件更加耗费资源。

因此,如果您尝试缓存内容以保存单个文件,请忘记该想法。