文件转换,内存使用(头脑风暴)



我正在编写一个文件转换器应用程序,它需要a文件并转换为B。提供了接受byte[]并返回byte[]的转换器方法。

我现在的想法是把整个文件读成一个byte[],然后把它分成byte[]块(所以我基本上有List<byte[]>我也可以看到进展),因为能够转换并行。转换完成后,可选择是否保存

现在,如果我用1-2Gb这样的大文件运行这个,显然我要持有文件的内容两次(一次是我读取的,第二次是我转换的),这很容易导致高内存使用。

你怎么看,我怎么优化这个?

指出:

  • 转换和保存是用户的不同操作
  • 一个文件可以并行转换成不同的文件格式
  • 可以将多个文件加载到应用程序中,可以同时启动多个转换(这意味着更多的文件被读入内存并存储转换结果)
  • 特别是,当我同时运行多个文件转换为多个扩展名时,可能会花费大量的RAM。

我将使用List<Span<byte>>来引用原始byte[]中的部分,而不是复制byte[]的每个部分。

https://learn.microsoft.com/en - us/dotnet/api/system.span 1 - ?view=net - 6.0

当然,这取决于你想做什么,假设你以后不需要引用内存中的原始值。

最新更新