Aspose.Cell转换Excel文件为html格式时内存在2s以内瞬间飙升到1G以上,在线求解答!

问题背景
使用Aspose.Cell.dll(版本为:20.3.0.0)在处理单个Excel文件转换为Html文件时,每次都会出现IIS站点资源占用内存过高的问题,每次都监视到w3wp.exe进程从10MB在1、2s以内瞬间涨到1G以上,然后再降到500MB左右。

内存过高录屏演示
https://imgtu.com/i/fKOMyF

demo下载(内含样例excel)
链接:https://pan.baidu.com/s/1ivXht1AEmqr0JwAWNaGOTA
提取码:qzkx

核心代码:
public static void Handle(string inputFile, string outputFile)
{
HtmlSaveOptions saveOptions = new HtmlSaveOptions(SaveFormat.Html);

        saveOptions.ImageOptions.ImageType = ImageType.Png;
        saveOptions.ImageOptions.Transparent = true;
        saveOptions.ImageOptions.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
        saveOptions.ImageOptions.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
        saveOptions.ExportGridLines = true;
        saveOptions.ExportImagesAsBase64 = true;
        saveOptions.ExportWorksheetCSSSeparately = false;
        saveOptions.ExportHiddenWorksheet = false;

        using (var fileStream = new FileStream(inputFile, FileMode.Open, FileAccess.Read, FileShare.Read))
        {
            using (Workbook excel = new Aspose.Cells.Workbook(fileStream))
            {
                using (var tempExcel = CopyVisibleSheet(excel))
                {
                    PreProcess(tempExcel);                        
                    tempExcel.Save(outputFile, saveOptions);
                }
            }
        }
    }

是否有什么方案或新版本的Aspose.Cell可解决内存飙升过高的问题?

@BruceGOGO,

我不认为临时内存增加问题是由于 Aspose.Cells API,而是由于 IIS 进程本身。 如果您遇到同样的问题,您能否尝试删除项目中有关 Aspose.Cells API 的代码并使用其他一些代码?

顺便说一句,您的Excel文件项目下载链接已过期,不再存在,因此我们无法下载它进行测试。

如果有任何不同,我们还建议您尝试我们的最新版本:Aspose.Cells for .NET v21.7.7:
Aspose.Cells21.7.7 For .Net2_AuthenticodeSigned.Zip (5.6 MB)
Aspose.Cells21.7.7 For .Net4.0.Zip (5.6 MB)
Aspose.Cells21.7.7 For .NetStandard20.Zip (5.6 MB)

如果您仍然发现问题,请创建一个示例可运行的 Visual Studio ASP.NET 项目,压缩该项目并与我们共享所有资源文件。 我们会尽快检查您的问题。

1 Like

百度网盘地址我试过了是可以下载的,那你方便留一下你的邮箱地址么?我发你邮箱。
我确认,在iis里其他什么都没跑,并且项目里没做任何其他操作,单纯只做aspse.cell的转换excel为html的动作,且就一个请求。

@BruceGOGO,
要求您压缩解决方案并将其附在此处。 如果您不想公开示例解决方案,请将此线程标记为私有。 您也可以将此解决方案上传到某些文件共享服务并再次共享下载链接以供我们参考。

@BruceGOGO,

我们已尝试编译您的解决方案,但无法在 Windows 中编译。 后来在 macOS 中尝试过,但仍然存在如下问题:

Test/Aspose.Cell.Bug.Demo.Web/Aspose.Cell.MemoryBug.Demo.Web.csproj(145,5): error : This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see Troubleshooting NuGet Package Restore in Visual Studio | Microsoft Learn. The missing file is …/…/Aspose.Cell.Bug.Demo/packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1/build/net46/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props.

您能否分享您的环境详细信息和用于测试的 Visual Studio 版本?

@ahsaniqbalsidiqui
@Amjad_Sahi ahsaniqbalsidiqui

再下载后试试:
https://note.youdao.com/ynoteshare1/index.html?id=ab6c4f09ed8493535656b0aefed6a3b1&type=note

@BruceGOGO,

我下载了您上传的新项目,然后使用 VS.NET 2019 将解决方案打开到其中。 然后我尝试编译/运行该项目,但无济于事。 我收到了错误,请参阅所附的屏幕截图。
sc_shot1.png (89.7 KB)

简而言之,我们仍然无法最终运行您的项目。 所以,请创建一个可以在我们这边执行的独立项目。 顺便说一句,您使用的是旧版本的项目,即 Aspose.Cells v20.3,所以我们也建议您尝试我们的最新版本,即 Aspose.Cells v21.7,如果它有什么不同吗?

之前一直用的.netframework4.7,有部分dll没发提供,现在我调整为为4.5了,应该可以下载并编译完成了,您再试试:
https://note.youdao.com/ynoteshare1/index.html?id=ab6c4f09ed8493535656b0aefed6a3b1&type=note

@BruceGOGO,
能否请您再次共享文件,因为我看到此错误:存档格式未知或已损坏

有错误截图么?我用好几个电脑下载那个文件后都可以解压,用VS2019打开项目文件并编译后运行成功。

@ahsaniqbalsidiqui @Amjad_Sahi
有错误截图么?我用好几个电脑下载那个文件后都可以解压,用VS2019打开项目文件并编译后运行成功。

@BruceGOGO,
感谢您分享工作样本。 我们已设法提取并运行此应用程序,但不敢分享此问题不会重现。 但是,观察到 CPU 利用率在大约 1 分钟内增加到 90% 左右。 此测试在 Windows 7 VM 中执行。 您能否分享一些有关您的环境的更多详细信息? 您使用的是哪个版本的 Windows 以及您最终安装的 IIS 版本是多少?

IIS版本:10.0.18362.1
Windows版本:Win10 教育版
@Amjad_Sahi
@ahsaniqbalsidiqui

在IIS运行demo(必须使用demo中提供的BugFile.xls文件才可呈现以下问题),
最终结论如下,请参考:
1、using (Workbook excel = new Aspose.Cells.Workbook(fileStream))
image-2021-08-11-12-47-34-660.png (14.4 KB)
该代码会造成内存只上升不下降,运行多次,内存占用
第1次:233MB
第2次:396MB
第3次:481MB
第4次:518MB
第5次:598MB
第6次:640MB

第15次:1029MB

2、 sheet.Cells.DeleteBlankColumns();
screenshot-6.png (7.1 KB)
单次运行此代码,会导致内存从3s内增长到1.3个G,去除此行代码后再运行,内存会占用到600MB左右。但是运行10多次后,内存仍然存在达到1G的情况

@BruceGOGO,
我们正在分析这个问题以供我们参考,请您删除 Aspose.Cells 相关代码并按照 Amjad 此处的建议测试应用程序。