【发布时间】:2021-07-05 15:44:05
【问题描述】:
当进程运行时,我的 Blazor 服务器端应用程序使用了过多的缓存。 我想在进程结束时清除 IIS 服务器上的所有 webapp 缓存。 我需要在流程结束时通过代码对其进行编码,但不知道如何....
我们可以在最后一行看到我的应用...
我们可以从 TaskManager 中看到它...
【问题讨论】:
-
没有“自动”缓存,除非您启用它。除非明确配置,否则 IIS 不会缓存数据或 HTML 输出。即便如此,它的大小也是有限的。这看起来像是应用程序代码中的内存泄漏。
-
@PanagiotisKanavos 感谢您的建议,但您认为我们该如何解决?从哪里泄漏..?或替代解决方案,例如在 iis 上重新启动 webapp ...?
-
调试时使用Diagnostic Tools窗口实时查看内存使用情况。如果它随着时间的推移不断增加,则存在泄漏。如果您看到锯齿图像,每次 GC 后使用率下降,代码会生成大量临时对象,例如字符串。字符串是不可变的,因此每个字符串操作都会生成新的字符串。通过拆分行和字段来解析 CSV 文件可能会导致 大量 需要收集的垃圾
-
您可以使用“诊断”窗口中的Memory Usage 选项卡来检查每种类型的实例有多少,它们使用了多少内存,以及自上次快照以来是否生成了新实例
-
@PanagiotisKanavos 是的,我有很多解析 csv 文件解析......并且内存选项卡显示内存增加,就像你说的那样,但只有当我开始处理所有 csv 文件解析时,它才会在上面工作 1 小时,内存容量最高可达 12GB,但是当我的工作完成后如何重新分配这个缓存?你说的是GB?垃圾收集器?如何清空这些垃圾?
标签: c# asp.net-core blazor blazor-server-side