MVC 内存问题,控制器调用完成后内存未清除(包括示例项目)
MVC memory issue, memory not getting cleared after controller call is finished (Example project included)
我的问题:调用生成csv文件内容的控制器后returns,内存没有被清理。这会产生问题,因为它会慢慢填满内存,一段时间后您最终会在服务器上使用 100% 的内存,这个问题可以通过生成更大的 csv 文件来加速,例如在下面的项目中它只生成 300 万行 csv占满内存的文件内容
我想要的:内容用完后清空内存
我尝试了一些使用语句和 IDisposable 的方法,但 none 解决了这个问题。
我能想到的唯一方法是使用指针并手动清除 RAM,因为垃圾收集器出于某种原因没有删除不再使用的旧数据。
RAM 使用问题主要出现在“测试”函数和 GetDymmyData 周围。
我没有在此 post 中添加代码示例,因为我已尝试在 中添加代码示例
但最终代码太多了
github版本是这个问题的修复版本,所以你可以去探索我在变更集中所做的事情
备注:
- 生成大文件后,您可能需要在 C# 释放内存之前下载较小的文件
- 添加强制垃圾收集帮助很大
- 添加一些 using 语句也有很大帮助
较小的现有问题
- 如果您的对象无法放入 RAM 并且它开始填充页面文件,它不会在使用后减少页面文件(重新启动您的电脑会有所帮助,但不会完全清除页面文件)
- 无论我尝试什么,我都无法将它的 ram 使用量降低到 400MB 以下,但是如果我有 5GB 或 1GB 的 RAM 也没关系,它仍然会减少到 ~400MB
我的问题:调用生成csv文件内容的控制器后returns,内存没有被清理。这会产生问题,因为它会慢慢填满内存,一段时间后您最终会在服务器上使用 100% 的内存,这个问题可以通过生成更大的 csv 文件来加速,例如在下面的项目中它只生成 300 万行 csv占满内存的文件内容
我想要的:内容用完后清空内存
我尝试了一些使用语句和 IDisposable 的方法,但 none 解决了这个问题。 我能想到的唯一方法是使用指针并手动清除 RAM,因为垃圾收集器出于某种原因没有删除不再使用的旧数据。
RAM 使用问题主要出现在“测试”函数和 GetDymmyData 周围。
我没有在此 post 中添加代码示例,因为我已尝试在
github版本是这个问题的修复版本,所以你可以去探索我在变更集中所做的事情
备注:
- 生成大文件后,您可能需要在 C# 释放内存之前下载较小的文件
- 添加强制垃圾收集帮助很大
- 添加一些 using 语句也有很大帮助
较小的现有问题
- 如果您的对象无法放入 RAM 并且它开始填充页面文件,它不会在使用后减少页面文件(重新启动您的电脑会有所帮助,但不会完全清除页面文件)
- 无论我尝试什么,我都无法将它的 ram 使用量降低到 400MB 以下,但是如果我有 5GB 或 1GB 的 RAM 也没关系,它仍然会减少到 ~400MB