编程语言
首页 > 编程语言> > c# – 从驱动器中读取大部分文件

c# – 从驱动器中读取大部分文件

作者:互联网

我正在使用C#中的大文件(可以达到可用内存的20%-40%),我只需要将一小部分文件一次加载到内存中(比如1-2%的文件) ).我在想使用FileStream是最好的选择,但是idk.我需要给出一个起点(以字节为单位)和一个长度(以字节为单位)并将该区域复制到byte []中.可能需要在线程之间共享对文件的访问,并且该文件将位于文件中的随机位置(非线性访问).我也需要快速.

该项目已经有不安全的方法,所以请随意从C#更危险的一面提出建议

解决方法:

FileStream将允许您搜索所需文件的部分,没问题.这是在C#中使用它的推荐方法,而且速度很快.

线程之间共享:您需要创建一个锁,以防止其他线程在您尝试从中读取时更改FileStream位置.最简单的方法:

//  This really needs to be a member-level variable;
private static readonly object fsLock = new object();

//  Instantiate this in a static constructor or initialize() method
private static FileStream fs = new FileStream("myFile.txt", FileMode.Open);


public string ReadFile(int fileOffset) {

    byte[] buffer = new byte[bufferSize];

    int arrayOffset = 0;

    lock (fsLock) {
        fs.Seek(fileOffset, SeekOrigin.Begin);

        int numBytesRead = fs.Read(bytes, arrayOffset , bufferSize);

        //  Typically used if you're in a loop, reading blocks at a time
        arrayOffset += numBytesRead;
    }

    // Do what you want to the byte array and return it

}

根据需要添加try..catch语句和其他代码.无论你到哪里访问这个FileStream,都要锁定成员级变量fsLock …这会阻止其他方法在你试图读取时读取/操作文件指针.

速度方面,我认为你会发现你受到磁盘访问速度的限制,而不是代码.

您将不得不考虑有关多线程文件访问的所有问题…谁初始化/打开文件,谁关闭它等等.有很多理由可以覆盖.

标签:c,file,data-access
来源: https://codeday.me/bug/20190531/1188311.html