gpt4 book ai didi

javascript - 使用 Web 浏览器控件传输文件时出现内存不足异常(大约 10MB 或更大)

转载 作者:行者123 更新时间:2023-11-30 20:54:40 25 4
gpt4 key购买 nike

我们的产品使用网络浏览器控件将本地文件直接导入我们的网络应用程序。当用户单击软件上的“导入”时,所选文件将保存到一个临时文件中,然后 Web 浏览器控件将打开我们的 Web 应用程序,文件将在其中导入。用户可以从那里编辑网络应用程序中的属性。

这适用于较小的文件,但一旦文件达到大约 10MB 或更大,就会抛出 OutOfMemory 异常。

下面是我们用来检索文件并将文件传递到网络应用程序的代码的简化:

public string GetFiles() {
List<DmFile> dmFiles = new List<DmFile>(); // DmFile is a class containing the file bytes and other document information
foreach (var file in ImportFiles) { // ImportFiles contains the list of class ImportFile
byte[] fileBytes = File.ReadAllBytes(file.FilePath);
DmFile dmFile = new DmFile(file.Name, fileBytes);
dmFiles.Add(dmFile);
}
string jsonList = JsonConvert.SerializeObject(dmFiles);
return jsonList;
}

GetFiles() 序列化文件列表并将 JSON 传递给 View 模型。

这是 View 模型 (javascript) 代码的片段:

var webControl: any = window.external;
var jsonFilesString = webControl.GetFiles();

我们使用 window.external 调用 Web 浏览器控件。然后我们直接从 Javascript 代码调用 GetFiles() 方法来检索 JSON,这样我们就可以使用文件字节了。

GetFiles() 尝试将 JSON 设置为 jsonFilesString 时,OutOfMemory 异常发生。

关于我们可以在哪里优化以允许这些更大的文件大小的任何想法,或者这是对我们的文件传输方法(通过 WebBrowserControl 传递 JSON)的限制?

谢谢

最佳答案

您不会用当前的文件数据传输方式解决这个问题。您正在使用大量内存将所有这些字节转换为字符串。

建议重新安排您的应用程序以使用不需要将 byte[] 转换为字符串的模式。

1) 将保存文件和编辑文件属性的过程分开。

2) 为用户提供一个表单来编辑文件属性。用户提交对您的服务的更改,服务更新文件属性。

3) 仅在用户需要保存(下载)时才返回二进制文件。

Achievement 是一种可扩展的解决方案,适用于达到或超过 10MB 限制的更大文件。

关于javascript - 使用 Web 浏览器控件传输文件时出现内存不足异常(大约 10MB 或更大),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47803525/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com