如何让 .NET 取消未使用的 RAM?

2024-01-04

以下是我的程序在极其密集地使用内存后的统计数据,在峰值时消耗 6 GB,但随后将所有内容保存到磁盘并在范围内留下很少的内容:

观察到几乎所有内容都超出了范围并已被垃圾收集- 堆大小很小。然而,.NET 保留了 181 MB坚定的.

我不介意保留字节,因为那只消耗地址空间。但提交的内存很烦人——即使它只驻留在页面文件中,它仍然相当多。


根据CLR 彻底揭秘 - 大型对象堆揭秘 http://msdn.microsoft.com/en-us/magazine/cc534993.aspxCLR 在第 2 代垃圾收集期间回收未使用的已提交内存。

这意味着您可以等待第 2 代垃圾回收自行发生,也可以使用强制垃圾回收GC.Collect() - you really但是,如果您选择此路线,则需要知道您在做什么,因为它会扰乱垃圾收集器的标准垃圾收集周期,这确实会影响性能:

  • 完整的垃圾收集速度很慢,因此您真的不想太频繁地执行此操作
  • 比标准计划更频繁地触发垃圾收集会将额外的对象提升到更高的代,这意味着它们可能不会像正常情况下那样尽快被收集

据我所知(根据我相当有限的研究),CLR 在其他情况下不会释放已提交的内存。

您还应该考虑这是否确实是一个问题:

  • 如果您的进程要立即继续执行额外的内存密集型处理,那么它将很快再次需要该内存,因此无论如何解除该内存并没有多大好处
  • 如果您的进程已完成并将很快终止,那么内存无论如何都会被解除使用
  • 无论如何,提交那么多内存并不一定会带来很大的缺点 - 是的,这意味着内存分配了一个后备存储,但是如果系统面临内存压力,那么该后备存储可能是一个页面文件反正。

Update: 似乎支持这样的假设:内存仅在第 2 代/完整收集期间未提交:

当收集第 2 代中的对象时,CLR 堆管理器会回收段中的内存,当不再需要某个段时,它会被完全释放。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何让 .NET 取消未使用的 RAM? 的相关文章

  • C 中带有指针的结构的内存开销[重复]

    这个问题在这里已经有答案了 我意识到当我的结构包含指针时 它们会产生内存开销 这里有一个例子 typedef struct int num1 int num2 myStruct1 typedef struct int p int num2
  • 为什么文件更新时“如果较新则复制”不复制文件?

    我在 Visual Studio Express 中有一个解决方案 如下所示 The LogicSchemaC 中的类 将在运行时解析指定的 XML 文件 以下是在main的方法Program cs LogicSchema ls new L
  • 从同步上下文调用异步方法

    我在代码中通过 HTTP 调用服务 最终使用 HttpClient SendAsync 方法 然后从 WebAPI 控制器操作调用此代码 大多数情况下 它工作得很好 测试通过 但是当我在 IIS 上部署时 我遇到了死锁 因为异步方法调用的调
  • 自定义行为的配置错误

    我创建了一个与 WCF 服务一起使用的自定义行为 以将所有错误记录到应用程序日志中 我做了一个BehaviorExtensionElement对于行为 public ErrorLoggingBehaviorExtensionElement
  • 为什么要加密 ASP.NET 中的查询字符串?

    我正在开发一个用 C ASP NET 编写的 Web 应用程序 该应用程序的原始设计者选择使用加密的查询字符串和Viewstate控制应用程序的 安全 和 状态 在此之前 我来自 GET POST 世界 我没有很好的基础来理解为什么人们会经
  • 为什么 System.Math 有 Sin、Cos 等外部方法?

    MethodImpl MethodImplOptions InternalCall public static extern double Sin double a 其原因何在 MethodImplOptions InternalCall表
  • 为什么 Application.Exit 无法工作?

    我有一个应用程序在取消对话框时出现奇怪的错误 如果该框被取消 应用程序将无法继续 因此它会退出 但由于某种原因它无法工作 因此它会继续运行并崩溃 我调试了这个问题 并且不知何故应用程序在 Application Exit 调用之后运行 我正
  • Response.Redirect() 将绝对 URL 作为相对 URL 处理

    我有一个 net C 页面 它重定向到绝对 url 例如 Response Redirect rtsp myvideoServer com myVideoAddress mp4 ticket 1234 dt 1234 但重定向后会导致 ht
  • 大学软件开发:从 Datatel/Colleague 获取数据

    我在北卡罗来纳州的一所社区大学工作 我们最核心的数据存储库是一个名为 Datatel 的软件系统 又名 Colleague 为什么它有两个名字 我不知道 在我们的例子中 底层数据存储是 IBM Unidata 我使用 net 技术进行开发
  • 如何修复“Oracle.EntityFrameworkCore 类型中的方法‘get_Info’没有实现”。

    我正在尝试通过 EW 连接到 Oracle DB 论方法OnConfiguring是错误 System TypeLoadException 程序集 Oracle EntityFrameworkCore Version 2 0 19 1 Cu
  • 这个 SQL 查询有什么问题?

    在过去的一个小时里 我一直在尝试此查询的不同变体 但我在用户名处收到错误 并且用户名只是一个普通字符串 其中的用户名是我从不包含特殊字符或任何内容的 xml 文件中获取的 我正在使用 SLQ 紧凑型 3 5 P S 我尝试使用 而不是 us
  • 如何在.NET中使用java.util.zip.Deflater解压缩放气流?

    之后我有一个转储java util zip Deflater 可以确认它是有效的 因为 Java 的Inflater打开它很好 并且需要在 NET中打开它 byte content ReadSample sampleName var inp
  • 当进程等待完成时如何显示加载控件?

    我决定使用这个第三方组件在我的 Windows 窗体中制作一个简单的加载控件 http www codeproject com Articles 14841 How to write a loading circle animation i
  • 获得新的 access_token 后,如何更新我的 cookie?

    使用刷新令牌获取新的访问令牌后 我想使用该访问令牌更新我的客户端 cookie 我的客户端能够使用 ajax 登录并调用我的 REST API 但是当第一次授权过期时 API 调用自然不再起作用 我有一个 NET Web 应用程序 它使用自
  • 处理双 NaN 和 Inf 时的 ILASM 问题

    我创建了一个简单的程序 并初始化了双精度类型值 var a double NaN 我使用 Visual Studio 2019 net Framework 4 5 构建项目 并使用 ILDASM exe 版本 4 0 30319 0 将其反
  • 为什么在 C# 中使用 String.Concat()?

    我想知道这个问题有一段时间了 为什么使用String Concat 而不是使用 操作员 我明白了String Format因为它是一个空洞使用 运算符并使您的代码看起来更好 例如 string one bob string two jim
  • 签署.net核心程序集的正确方法

    我正在尝试签署 net core 库 但我不确定我是否正确执行了所有操作 1 使用VS命令提示符IS调用sn k mykey snk 2 复制mykey snk到我的项目文件夹 3 in project json添加了密钥文件 framew
  • Nullable 是不可能的,为什么不呢? [复制]

    这个问题在这里已经有答案了 如果这是一个愚蠢的问题 请原谅 我正在尝试更好地理解 Net 中的 Nullable 类型 从我从 Microsoft 源代码 使用 ReSharper 中注意到的内容 我了解到 Nullable 是一个结构 而
  • .pdbs 会减慢发布应用程序的速度吗?

    如果 dll 中包含 pdb 程序调试 文件 则行号将出现在引发的任何异常的堆栈跟踪中 这会影响应用程序的性能吗 这个问题与发布与调试 即优化 无关 这是关于拥有 pdb 文件的性能影响 每次抛出异常时都会读取 pdb 文件吗 加载程序集时
  • Nhibernate:连接表并从其他表获取单列

    我有以下表格 create table Users Id uniqueidentifier primary key InfoId uniqueidentifier not null unique Password nvarchar 255

随机推荐

  • iOS7 中 UIKeyboard 不会自动半透明

    据我了解 在 Xcode 5 和 iOS 7 项目中进行开发时 与 UITextField 交互时弹出的键盘应该是半透明的 并通过背景中的任何颜色显示 我的两个项目都不是这种情况 我有一个彩色且模糊的背景 我希望它能够通过键盘实现 但是键盘
  • 如何使用 EmberJS 扩展命名空间

    我用 Javascript 编程已经有一段时间了 最近 我做了一个相当大的 jQuery 项目 并应用了模块模式 如这篇精彩文章中所述 http www adequatelygood com 2010 3 JavaScript Module
  • 以管理员身份运行 R

    我使用自己的笔记本电脑安装 R 发现它只有一个库 即使这个图书馆仍然read only 每次我使用 Rstudio 时 install packages abc 我可以看到新的包自动存储到其中read only库文件夹 在我办公室的桌面上
  • 我的布局未在 Magento 管理视图中加载

    这是我的控制器
  • SDK 管理器无法启动 Windows 7 64 位?

    我知道这个问题之前已经被解决过几次 但我没有对一个旧问题发表评论 而是决定用 希望 更新的信息提出一个新问题 正如标题所示 无论我做什么 我都无法让 SDK Manager 运行 我尝试安装 32 位和 64 位版本的 jdk1 7 0 但
  • 如何使用 NSUserDefaults 存储字典数组

    尝试存储字典数组NSUserDefaults var theTasks String Any num 1 title example colour red let defaults NSUserDefaults standardUserDe
  • 如何使用 ColdFusion 从 XML 字符串中删除所有多余的空格?

    我从客户端收到一个 XML 字符串 格式如下
  • web.xml 中的 Struts2 配置文件名

    http struts apache org 2 3 1 2 docs webxml html http struts apache org 2 3 1 2 docs webxml html 根据上面的链接我们可以在web xml中指定配置
  • 在单独的线程上捕获未处理的异常

    我正在使用以下事件来捕获主 UI 线程中未处理的异常 Application ThreadException 不幸的是 它无法在单独的线程中捕获那些未处理的错误 我知道 AppDomain CurrentDomain UnhandledEx
  • 如何将仓位策略添加到 Angular CDK 叠加层?

    如何添加定位策略 ConnectedPositionStrategy 到 Angular CDK 覆盖 我尝试通过指定它positionStrategy属性并将其传递给overlay create import Overlay Connec
  • 如何获取生成表的行表示?

    我想要得到Row N lt gt 生成的 JOOQ 表类型的表示 我想在这种情况下使用它 val p PROJECTS as p val pmu PROJECTMEMBERUSERS as pmu val query db select p
  • 提取所有 JSON 密钥

    我有一个 JSON 列j like a 2 b b1 3 b2 5 c 3 a 5 d 1 c 7 如何从 Presto 获取所有不同的 顶级 键名称 IE 我喜欢 select distinct foo j 回来 a b c d 请注意
  • Fetch Type LAZY 仍然会导致急切加载 Hibernate Spring 数据

    我使用 Spring 数据创建了一个简单的 Spring boot 项目 我有一个与标签具有一对多关系的 TagGroup 实体 Entity Table name TAG GROUP public class TagGroup OneTo
  • moz变换比例减小div大小问题

    我在 mozilla moz transform 缩放属性方面遇到问题 我正在寻找 Zoom 属性的替代品 它在除 Firefox 之外的所有平台上都能正常工作 当我想缩小 div 时 它的 内容 确实缩小了 但容器的大小保持不变 在其他内
  • 在 JavaScript 正则表达式匹配中移动索引

    我有这个正则表达式来从文本中提取双词 A Za z s A Za z g 以及这个示例文本 Mary had a little lamb 我的输出是这样的 0 Mary had 1 a little 而我的预期输出是这样的 0 Mary h
  • 设置远程共享继承其父目录权限的 C# 代码

    我有两台计算机 分别称为客户端和服务器 位于 Windows 域中 服务器有一个可以从客户端计算机访问的共享目录 我想在客户端上运行一个 C 应用程序 该应用程序设置此共享的权限以继承服务器上共享的父目录的权限 我该怎么做呢 我已经尝试过以
  • 在 Google Cloud Storage 存储桶上设置缓存控制

    我有一个存储桶 其中包含经常更新的公共图像 并且希望禁用默认缓存持续时间 3600 例如 Cache Control private max age 0 no transform 使用 PHP 上传文件时可以设置缓存控制吗 有没有办法为存储
  • git 如何检测文件已被修改?

    git 如何如此快地检测到文件修改 它是否对存储库中的每个文件进行哈希处理并比较 SHA1 这会花费很多时间 不是吗 或者说比较atime ctime or mtime Git 努力仅从 lstat 值中确信工作树与索引匹配 因为回退到文件
  • 如何从 TableList POI 中移除/删除表格

    我正在使用模板 docx 文件来填充每个表上的数据 但在某些情况下我不想要同一个表 是否有使用可以删除 删除的 XWPFTable 你可以试试 int position document getPosOfTable table docume
  • 如何让 .NET 取消未使用的 RAM?

    以下是我的程序在极其密集地使用内存后的统计数据 在峰值时消耗 6 GB 但随后将所有内容保存到磁盘并在范围内留下很少的内容 观察到几乎所有内容都超出了范围并已被垃圾收集 堆大小很小 然而 NET 保留了 181 MB坚定的 我不介意保留字节