c# - 如何在 C# 中处理大文件?

标签 c# out-of-memory iso

我想在 C# 中使用大型 .ISO 文件。我想操作它,添加和删除其中的文件,并从中创建一个新的 iso。我尝试过 DiscUtils 库,但似乎无法让它工作。当我加载它时(使用标准 C# 函数),我总是收到 OutOfMemoryException。这是一个 600MB 的 ISO(或多或少),我有 2GB 的 RAM。

我目前正在这样做:

                FileStream fs = new FileStream(FileDialog.FileName, FileMode.Open, FileAccess.Read);
                BinaryReader b = new BinaryReader(fs);


                byte[] buffer = b.ReadBytes((int)fs.Length);




                int count;                            // actual number of bytes read
                int sum = 0;
                while ((count = b.Read(buffer, (int)sum, (int)(buffer.Length - sum))) > 0)
                {
                    sum = sum + count;  // sum is a buffer offset for next reading
                }

它在“byte[] buffer = b.ReadBytes((int)fs.Length);”处抛出OutOfMemoryException。当我删除/添加内容到 ISO 时,我可以将其加载为多个部分,还是必须是整个文件?

更新1:我限制了缓冲区:

FileStream fs = new FileStream(FileDialog.FileName, FileMode.Open, FileAccess.Read,FileShare.Read,4096);

但还是什么都没有。

我该如何使用它?

最佳答案

在 C# 中处理大文件的常用方法是使用 FileStream并一次处理小块。但这取决于您的库是否可以处理 FileStreams,是否可以使用它。

关于c# - 如何在 C# 中处理大文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13375561/

相关文章:

c# - 隐式和显式方法隐藏

scala - 在类中包装 akka actor 会导致内存泄漏吗?

php - MySQL:是否可以在结果表中格式化 UNIXTIME?

tsql - 按欧洲标准周和年分组的问题

c# - Matlab 和 C# 应用程序之间的 WCF

c# - Azure 服务总线重试策略不会改变行为

c# - AuthorizeAttribute 和 POST 异步

android - Android应用程序内存不足错误

mysqld 内存不足但内存充足(?)

iphone - 通过 TBXML 解析 XML 在演示项目中有效,但在我的真实项目中不起作用