Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 正在7z.dll中提取ISO文件-内存不足异常_C#_Iso_7zip_Sevenzipsharp - Fatal编程技术网

C# 正在7z.dll中提取ISO文件-内存不足异常

C# 正在7z.dll中提取ISO文件-内存不足异常,c#,iso,7zip,sevenzipsharp,C#,Iso,7zip,Sevenzipsharp,我现在使用了两个包装器来尝试提取ISO文件。但没有成功 我试过了,但他们都给出了同样的例外。 ISO文件包含.vob文件(电影),ISO文件的总大小为4.35GB。当我试图从中提取一个1GB的.vob文件时,会出现内存不足异常 实际上,我想提取.vob文件,然后通过Upnp/DLNA流式传输它们 SevenZipExtractor Extractor; try { String[] FileNames = RawFileExtractor(path,

我现在使用了两个包装器来尝试提取ISO文件。但没有成功

我试过了,但他们都给出了同样的例外。 ISO文件包含.vob文件(电影),ISO文件的总大小为4.35GB。当我试图从中提取一个1GB的.vob文件时,会出现内存不足异常

实际上,我想提取.vob文件,然后通过Upnp/DLNA流式传输它们

    SevenZipExtractor Extractor;
    try
      {
         String[] FileNames = RawFileExtractor(path, out Extractor);
         Extractor.ExtractFile(FileNames[8], ms) //the 1GB file: exception is here
      }
    catch{}
    Extractor.Dispose();
看不到“ms”,但可以在MemoryStream中猜到。对于jiggabyte文件来说,这确实不太好用。当程序作为32位进程运行时,很可能会出现OutOfMemoryException。很容易安装到你的机器上,你必须控制马力。Project+属性,Build选项卡,选择AnyCPU,如果您看到它,请取消勾选“Preferred32位”


仍然非常浪费,如果用户没有64位操作系统,也不能保证在用户的机器上工作。非常不清楚您实际在使用MemoryStream做什么,您很有可能应该使用文件流,以便将其直接提取到磁盘。您将使用4096字节而不是jiggabyte。视频播放器不在乎是从内存还是从磁盘播放。同时回顾压缩视频的智慧,它已经被编码器压缩。

您是否使用7-zip的64位本机库?你能使用7-zip命令行、GUI或shell扩展来提取ISO文件吗?我使用的是32位,我的应用程序是32位版本。实际上,如果我试图从ISo文件中提取一个较小的.vob文件,代码就可以工作。如果整个文件在某个时候都保存在内存中,那么在32位内无法处理该大小的文件。那么,它使用了多少内存,您有多少内存?将1GB文件提取到内存将至少生成一个副本。。。一个文件的2GB已经用完了。我的Ram是8GB,我的C驱动器还有4GB。有没有更好的方法在c#中进行ISO提取和流式处理?我现在担心,即使我满足条件,我的程序的用户可能不会?谢谢你的回答,我的主要问题仍然没有解决,但至少内存不足的问题是由于在内存中加载流引起的。现在,我尝试将流直接发送到客户端套接字流,如下所示:Extractor.ExtractFile(文件名[8],request.socket.GetStream());我仍然得到套接字异常,但流的很大一部分是由客户端接收的。有什么建议可以让我安全地完成这项工作吗。1) 我需要使用7zip(以文件路径作为输入)和流作为输出来打开ISO文件。2) 然后将此oput put流式传输到客户端套接字。
     Extractor.ExtractFile(FileNames[8], ms)