C# GC 不释放内存[重复]

2024-02-01

我在 C# 中度过了一段糟糕的时光,在我不再引用它之后,它没有为我保存在内存中的大型结构释放内存。

我在下面添加了一些代码,这些代码展示了与我遇到的问题类似的问题。我想我一定是误解了关于 GC 的一些东西,因为我不确定为什么下面的代码会抛出内存不足异常。

有谁知道为什么我包含的代码会抛出内存不足?所有列表都不会被保留,并且可以立即清理。

Thanks,

Paul

重现:全新的 4.5 控制台应用程序,将代码粘贴到 Main 中。

在 for 循环的第一次迭代中,第三个“新列表”将引发异常。如果省略for循环,则不会发生OOM。

for (var i = 0; i < 100; i++)
{
    new List<int>(100 * 1000 * 1000);
    GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced, blocking: true);
    new List<int>(100 * 1000 * 1000);
    GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced, blocking: true);
    new List<int>(100 * 1000 * 1000);
    GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced, blocking: true);
    new List<int>(100 * 1000 * 1000);
    GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced, blocking: true);
}

好的,这确实会重现,但仅限于以下条件:

  • Fx 4.5,平台 = 任何 CPU,配置 = 调试。

通过选择 x64 平台或发布模式,程序将按预期运行。

所以,初步结论:在没有优化的情况下List<>仍然扎根于不该扎根的地方。因此 GC 调用根本不起作用,x86 内存空间很快就会耗尽。

这可能是一个错误,也可能是一个旨在调试的“功能”。

虽然看起来确实存在问题,但很容易避免。

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

C# GC 不释放内存[重复] 的相关文章

  • 当我在组合框中选择一个项目时,如何防止 TextChanged 事件?

    我有一个TextChanged http msdn microsoft com en us library system windows forms control textchanged aspx我的事件ComboBox http msd
  • 为什么在连接两个字符串时 Python 比 C 更快?

    目前我想比较 Python 和 C 用来处理字符串的速度 我认为 C 应该比 Python 提供更好的性能 然而 我得到了完全相反的结果 这是 C 程序 include
  • 如何判断计算机是否已重新启动?

    我曾经使用过一个命令行 SMTP 邮件程序 作为试用版的限制 它允许您在每个 Windows 会话中最多接收 10 封电子邮件 如果您重新启动计算机 您可能还会收到 10 个以上 我认为这种共享软件破坏非常巧妙 我想在我的应用程序中复制它
  • JNI 将 Char* 2D 数组传递给 JAVA 代码

    我想从 C 代码通过 JNI 层传递以下指针数组 char result MAXTEST MAXRESPONSE 12 12 8 3 29 70 5 2 42 42 在java代码中我写了以下声明 public static native
  • C# 数据表更新多行

    我如何使用数据表进行多次更新 我找到了这个更新 1 行 http support microsoft com kb 307587 my code public void ExportCSV string SQLSyntax string L
  • 在Linux中,找不到框架“.NETFramework,Version=v4.5”的参考程序集

    我已经设置了 Visual studio 来在我的 Ubuntu 机器上编译 C 代码 我将工作区 我的代码加载到 VS 我可以看到以下错误 The reference assemblies for framework NETFramewo
  • 告诉 Nancy 将枚举序列化为字符串

    Nancy 默认情况下在生成 JSON 响应时将枚举序列化为整数 我需要将枚举序列化为字符串 有一种方法可以通过创建来自定义 Nancy 的 JSON 序列化JavaScript 原始转换器 https github com NancyFx
  • 为什么可以通过ref参数修改readonly字段?

    考虑 class Foo private readonly string value public Foo Bar ref value private void Bar ref string value value hello world
  • 启动时的 Excel 加载项

    我正在使用 Visual C 创建 Microsoft Excel 的加载项 当我第一次创建解决方案时 它包含一个名为 ThisAddIn Startup 的函数 我在这个函数中添加了以下代码 private void ThisAddIn
  • 使用valgrind进行GDB远程调试

    如果我使用远程调试gdb我连接到gdbserver using target remote host 2345 如果我使用 valgrind 和 gdb 调试内存错误 以中断无效内存访问 我会使用 target remote vgdb 启动
  • C++ int 前面加 0 会改变整个值

    我有一个非常奇怪的问题 如果我像这样声明一个 int int time 0110 然后将其显示到控制台返回的值为72 但是当我删除前面的 0 时int time 110 然后控制台显示110正如预期的那样 我想知道两件事 首先 为什么它在
  • C++ 中的双精度型数字

    尽管内部表示有 17 位 但 IEE754 64 位 浮点应该正确表示 15 位有效数字 有没有办法强制第 16 位和第 17 位为零 Ref http msdn microsoft com en us library system dou
  • WPF DataGridTemplateColumn 组合框更新所有行

    我有这个 XAML 它从 ItemSource 是枚举的组合框中选择一个值 我使用的教程是 http www c sharpcorner com uploadfile dpatra combobox in datagrid in wpf h
  • 打印大型 WPF 用户控件

    我有一个巨大的数据 我想使用 WPF 打印 我发现WPF提供了一个PrintDialog PrintVisual用于打印派生的任何 WPF 控件的方法Visual class PrintVisual只会打印一页 因此我需要缩放控件以适合页面
  • Unity:通过拦截将两个接口注册为一个单例

    我有一个实现两个接口的类 我想对该类的方法应用拦截 我正在遵循中的建议Unity 将两个接口注册为一个单例 https stackoverflow com questions 1394650 unity register two inter
  • WebBrowser.Print() 等待完成。 。网

    我在 VB NET 中使用 WebBrowser 控件并调用 Print 方法 我正在使用 PDF 打印机进行打印 当调用 Print 时 它不会立即启动 它会等到完成整个子或块的运行代码 我需要确保我正在打印的文件也完整并继续处理该文件
  • 将数组作为参数传递

    如果我们修改作为方法内参数传递的数组的内容 则修改是在参数的副本而不是原始参数上完成的 因此结果不可见 当我们调用具有引用类型参数的方法时 会发生什么过程 这是我想问的代码示例 using System namespace Value Re
  • 使用 omp_set_num_threads() 将线程数设置为 2,但 omp_get_num_threads() 返回 1

    我有以下使用 OpenMP 的 C C 代码 int nProcessors omp get max threads if argv 4 NULL printf argv 4 s n argv 4 nProcessors atoi argv
  • 如何减少具有多个单元的 PdfPTable 的内存消耗

    我正在使用 ITextSharp 创建一个 PDF 它由单个 PdfTable 组成 不幸的是 对于特定的数据集 由于创建了大量 PdfPCell 我遇到了内存不足异常 我已经分析了内存使用情况 我有近百万个单元格的 1 2 在这种情况下有
  • 如何将十六进制字符串转换为无符号长整型?

    我有以下十六进制值 CString str str T FFF000 如何将其转换为unsigned long 您可以使用strtol作用于常规 C 字符串的函数 它使用指定的基数将字符串转换为 long long l strtol str

随机推荐

  • 角度$resource删除不会将正文发送到express.js服务器

    hye 我正在服务器端使用 angular js 和 node js Express js 构建一个应用程序 由于某种原因 我在处理删除请求时遇到问题 没有人到达服务器端 这是我的 angular js 资源代码 scope deleteP
  • Rails:带有参数的 rake 任务不起作用

    这是我的耙子任务 namespace users do task change role role gt environment do t args puts args role end end 我这样称呼它 rake users chan
  • 什么是图形上下文? (iOS)

    图形上下文到底是什么 当使用 Core Graphic 绘图时 我们会获得对上下文的引用 当我查看文档时 它似乎是一个对象 负责处理正确的绘图 无论是用于打印 设备 pdf 等 谁能帮助我理解上下文到底是什么 我尝试阅读文档 但我不明白 它
  • Oracle 协议适配器错误

    你好 我刚刚在我的笔记本电脑上安装了 Oracle 10 g Express Edition 平台是Windows XP SP3 安装正常 但是 当我尝试通过 SqlPlus 连接到 Oracle 数据库时 出现 TNS 协议适配器错误 我
  • ServicePointManager.SecurityProtocol 如何工作?

    我想知道楼盘怎么样ServicePointManager SecurityProtocol当我设置三个不同的时有效SecurityProtocolType在她的旗帜上 IE ServicePointManager SecurityProto
  • 什么是“git config user.password”?

    我见过git config user password在几个 Stack Overflow 答案中推荐作为保存 git 用户凭据的方法 如何在 Git 中保存用户名和密码 https stackoverflow com a 54979082
  • ESLint 错误 no-unneed-ternary

    ESLint 在我的 JS 模块中告诉我这个错误消息 错误 no unneeded ternary 不必要地使用条件表达式进行默认赋值 错误出现在get方法上的return陈述return val val defaultVal import
  • Auth0。如何获取访问令牌中用户的权限?

    如何使用 Auth0 的核心授权功能 在第一个授权请求中 获取访问令牌中的用户权限 我需要所有权限的数组以及有关用户的其他信息 附 我已经创建了角色 权限 并将角色分配给用户 在 API 设置中的访问令牌切换和 RBAC 中启用添加权限 这
  • 讲解extjs的MVC架构

    我使用 Javascript 创建了一个小型数独应用程序 现在我正在尝试将该 javascript 代码转换为 extjs 4 1 1a 代码 我已经经历了docs http docs sencha com ext js 4 1 guide
  • 使用jquery添加两个变量

    var a 1 var b 2 var c a b c将显示为12 但是我需要3 我如何使用 jQuery 做到这一点 绝对使用 jQuery 因为 jQuery 的威力显然是无与伦比的 下面是如何使用 100 jQuery var a 1
  • 如何使用R做多项选择题?

    我试图弄清楚如何分析我最近进行的一项调查中的多个选择 多个响应 即 选择所有适用的 问题 SPSS 具有分析在线调查数据和此类问题的出色功能 因此我猜测 R 具有该功能以及更多功能 在 Excel 中处理这些调查答案有点棘手 例如 按年龄显
  • Pathauto 中的菜单路径

    如何在 Drupal 7 下获取 pathauto 以通过完整菜单路径生成 URL 别名 只是一个更新 以防有人在使用更新版本的 Pathauto Token 时遇到此问题 这对我有用 节点 菜单链接 父母 加入路径 节点 菜单链接
  • 为什么0=0.5?

    我注意到 Z3 4 3 1 在处理 smt2 文件时出现一些奇怪的行为 If I do assert 0 0 5 就会得到满足 但是 如果我改变顺序并执行 assert 0 5 0 这是不能令人满意的 我对发生的情况的猜测是 如果第一个参数
  • pandas:将多列转换为字符串

    我有一些专栏 a b c etc a and c are float64 while b is object 我想将所有列转换为字符串并保留nans 尝试使用df a b c df a b c astype str 但这留下了空白float
  • spring-boot 数据源配置文件 w/ application.properties

    根据反馈更新了问题 我有一个 spring boot 应用程序 它具有三个数据库 用于集成测试的 H2 以及用于质量保证和生产的 Postgresql 由于 spring boot 为您创建了默认数据源 因此我没有为集成测试定义任何内容 我
  • PHP 在特定索引处插入

    我想将第一个索引处的数组元素移动到数组中的第五个索引 我怎样才能做到这一点 尽管目前对于您提出的问题至少有 2 个有效答案 但数组并不是保存频繁更改且排序很重要的列表的正确数据结构 随着数组大小的增加 这些解决方案将开始变得非常慢 正确的结
  • 按钮动作监听器

    好的 所以我制作了一个简单的程序 每次单击按钮时都会添加要计数器的值 现在 我想添加 自动 按钮功能 以在单击 自动 按钮时增加计数器的值 我遇到了问题 因为它不会在屏幕上呈现每个计数器值 而是在循环完成时更新值 这是我的代码 import
  • 用正则表达式替换第 n 个匹配项

    我正在尝试找到一种方法来替换更多比赛的第n场比赛 string one two three one one 如何定位第二次出现的 一 可以做这样的事情吗 string replace bone b gi 2 one 得到这样的东西 one
  • 迁移 Feign Load Balancer 实现以兼容 Spring cloud 2020.0.0

    我有以下与 Spring Cloud 一起使用的 Feign 负载均衡器的实现Hoxtan SR6依赖关系 import feign auth BasicAuthRequestInterceptor import org apache ht
  • C# GC 不释放内存[重复]

    这个问题在这里已经有答案了 我在 C 中度过了一段糟糕的时光 在我不再引用它之后 它没有为我保存在内存中的大型结构释放内存 我在下面添加了一些代码 这些代码展示了与我遇到的问题类似的问题 我想我一定是误解了关于 GC 的一些东西 因为我不确