压缩大文件时如何修复或绕过系统内存不足异常?
How to fix or get around a system out of memory exception when zipping large files?
所以我有一个压缩目录的应用程序,它工作得很好,除了今天我遇到了一个异常,当我检查日志时发现它遇到了一个系统内存不足异常,因为这个目录大约是 550mb .所以我的问题是:有没有办法解决这个问题或使我的应用程序能够处理更大的目录?
这是压缩目录的代码:
using (FileStream zipToOpen = new FileStream(destdir1, FileMode.Open))
{
using (ZipArchive archive = new ZipArchive(zipToOpen, ZipArchiveMode.Update))
{
int ind = folder.LastIndexOf("\") + 1;
string folderName = folder.Substring(ind, folder.Length - ind);
ZipArchiveEntry readmeEntry;
DirectoryInfo d = new DirectoryInfo(folder);
FileInfo[] Files = d.GetFiles("*");
foreach (FileInfo file in Files)
{
readmeEntry = archive.CreateEntryFromFile(folder + "\" + file.Name, folderName + "/" + file.Name);
}
DeleteDirectory(folder);
}
}
这听起来像是 ZipArchive
库的限制,它可能在压缩时将所有临时数据存储在内存中。
可能无法解决内存使用过多的问题,但要解决此问题,您可以在 64 位模式下重建应用程序。这可能会消除您遇到的内存上限。
所以我有一个压缩目录的应用程序,它工作得很好,除了今天我遇到了一个异常,当我检查日志时发现它遇到了一个系统内存不足异常,因为这个目录大约是 550mb .所以我的问题是:有没有办法解决这个问题或使我的应用程序能够处理更大的目录?
这是压缩目录的代码:
using (FileStream zipToOpen = new FileStream(destdir1, FileMode.Open))
{
using (ZipArchive archive = new ZipArchive(zipToOpen, ZipArchiveMode.Update))
{
int ind = folder.LastIndexOf("\") + 1;
string folderName = folder.Substring(ind, folder.Length - ind);
ZipArchiveEntry readmeEntry;
DirectoryInfo d = new DirectoryInfo(folder);
FileInfo[] Files = d.GetFiles("*");
foreach (FileInfo file in Files)
{
readmeEntry = archive.CreateEntryFromFile(folder + "\" + file.Name, folderName + "/" + file.Name);
}
DeleteDirectory(folder);
}
}
这听起来像是 ZipArchive
库的限制,它可能在压缩时将所有临时数据存储在内存中。
可能无法解决内存使用过多的问题,但要解决此问题,您可以在 64 位模式下重建应用程序。这可能会消除您遇到的内存上限。