.NET 中导致内存碎片的原因

2024-01-13

我正在使用 Red Gates ANTS 内存分析器来调试内存泄漏。它不断警告我:

内存碎片可能会导致 .NET 预留了过多的可用内存。

or

内存碎片影响可分配的最大对象的大小

因为我有强迫症,这个问题必须解决。

有哪些标准编码实践有助于避免内存碎片。 您可以通过一些 .NET 方法对其进行碎片整理吗?有帮助吗?


你知道,我有点怀疑这里的内存分析器。 .NET 中的内存管理系统实际上尝试通过移动内存来对堆进行碎片整理(这就是为什么您需要固定内存以使其与外部 DLL 共享)。

在较长时间内进行的大量内存分配容易产生更多碎片。虽然小的临时(短)内存请求不太可能导致 .NET 中的碎片。

这里还有一些值得思考的事情。在 .NET 当前的 GC 中,分配的内存在时间上接近,通常在空间上间隔也很近。这与碎片化相反。也就是说,您应该按照您想要访问的方式分配内存。

它只是托管代码还是包含 P/Invoke、非托管内存 (Marshal.AllocHGlobal) 或 GCHandle.Alloc(obj, GCHandleType.Pinned) 等内容?

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

.NET 中导致内存碎片的原因 的相关文章

  • 在Application_AquireRequestState事件中用POST数据重写Url

    我有一个在其中注册路线的代码Application AcquireRequestState应用程序的事件 注册路由后 我会在 Http 运行时缓存中设置一个标志 这样我就不会再次执行路由注册代码 在此事件中注册路线有特定原因Applicat
  • 访问“if”语句之外的变量

    我怎样才能使insuranceCost以外可用if陈述 if this comboBox5 Text Third Party Fire and Theft double insuranceCost 1 在 if 语句之外定义它 double
  • 如何在编译C代码时禁用警告?

    我正在使用 32 位 Fedora 14 系统 我正在使用编译我的源代码gcc 有谁知道如何在编译c代码时禁用警告 EDIT 是的 我知道 最好的办法是修复这些警告以避免任何未定义 未知的行为 但目前在这里 我第一次编写了巨大的代码 并且在
  • 导出类时编译器错误

    我正在使用 Visual Studio 2013 但遇到了一个奇怪的问题 当我导出一个类时 它会抛出 尝试引用已删除的函数 错误 但是 当该类未导出时 它的行为会正确 让我举个例子 class Foo note the export cla
  • Qt 计算和比较密码哈希

    目前正在 Qt 中为测验程序构建面向 Web 的身份验证服务 据我了解 在数据库中存储用户密码时 必须对其进行隐藏 以防落入坏人之手 流行的方法似乎是添加的过程Salt https en wikipedia org wiki Salt cr
  • 如何使用 wpf webbrowser 将数据发布到 Web 服务器

    我想从数据库获取数据并使用它来让用户登录到网站 我有一个包含 Web 浏览器控件的 wpf 页面 我有这样的代码 用于将用户登录到用 php 编写的网站
  • 存储过程上的 OdbcCommand - 输出参数上出现“未提供参数”错误

    我正在尝试执行存储过程 通过 ODBC 驱动程序针对 SQL Server 2005 但收到以下错误 过程或函数 GetNodeID 需要参数 ID 但未提供该参数 ID 是我的过程的 OUTPUT 参数 在存储过程中指定了一个输入 mac
  • 单线程公寓问题

    从我的主窗体中 我调用以下命令来打开一个新窗体 MyForm sth new MyForm sth show 一切都很好 但是这个表单有一个组合框 当我将其 AutoCompleteMode 切换为建议和追加时 我在显示表单时遇到了这个异常
  • 我可以仅在少数情况下关闭模拟吗

    我有一个始终使用模拟的应用程序 但是 当用户以管理员身份登录时 一些操作需要他们写入服务器本身 现在 如果这些用户在实际服务器上没有权限 有些用户没有 则不会让他们写入 我想做的是关闭几个命令的模拟 有没有办法做这样的事情 using Ho
  • C# datagridview 列转入数组

    我正在用 C 构建一个程序 并在其中包含一个 datagridview 组件 datagridview 有固定数量的列 2 我想将其保存到两个单独的数组中 但行数确实发生了变化 我怎么能这样做呢 假设一个名为 dataGridView1 的
  • 手动将 ClientBase 集合类型从 Array[] 更改为 List<>

    我将自己的 WCF 代理与 Client Base 一起使用 我想做一些类似于 svc util 中的 ct 属性的操作 并告诉代理返回 List 集合类型 我不能使用 List 因为实体由 nhibernate 管理 所以我必须使用 IL
  • 格式化货币

    在下面的示例中 逗号是小数点分隔符 我有这个 125456 89 我想要这个 125 456 89 其他示例 23456789 89 gt 23 456 789 89 Thanks 看看这个例子 double value 12345 678
  • 在简单注入器中注册具有多个构造函数和字符串依赖项的类型

    我正在尝试弄清楚如何使用 Simple Injector 我在项目中使用了它 注册简单服务及其组件没有任何问题 但是 当组件具有两个以上实现接口的构造函数时 我想使用依赖注入器 public DAL IDAL private Logger
  • dropdownlist DataTextField 由属性组成?

    有没有一种方法可以通过 C 使 asp net 中的下拉列表的 datatextfield 属性由对象的多个属性组成 public class MyObject public int Id get set public string Nam
  • 系统错误 124 - SHFileOperation 的 ERROR_INVALID_LEVEL

    我在使用时遇到问题SHFileOperation SHFileOperation SHFILEOPSTRUCT https stackoverflow com questions 9191415 shfileoperation shfile
  • 我们可以使用 EWS 托管 API 连接到 Exchange 2016 吗?

    我使用的是 EWS 托管 API 2 2 它的枚举中没有显示 Exchange 版本 2016 我可以看到 Exchange 2013 之前的版本 那么如何连接到 Exchange Server 2016 该 API 是否尚未从 Micro
  • 使用 foreach 循环和 XmlNodeList C# 将新节点附加到节点列表

    目前我处理的是这样的XML类型 XML FILE http 20drive google com open id 0By5BxgNi9eGcRldxcEZNU0FDTzQ 参考XML文件 我想检查一个节点 如果找不到该节点 我必须将该节点附
  • Windows 服务:错误 5:访问被拒绝

    我正在尝试创建一个简单的 Windows 服务 该服务的用户帐户是NetworkService 然后我跑了installUtil从命令提示符我得到了这个 提交阶段完成 成功地 事务安装已完成 这意味着服务已成功安装 但是当我尝试从Servi
  • 启动画面后主窗口出现在其他窗口后面

    我有一个带有启动屏幕的 Windows 窗体应用程序 当我运行该应用程序时 启动屏幕显示正常 消失并加载应用程序的主窗体 但是 当我加载主窗体时 它出现在包含该应用程序的 Windows 资源管理器目录下 这是运行启动画面然后运行主窗体的代
  • c# 模拟 IFormFile CopyToAsync() 方法

    我正在对一个异步函数进行单元测试 该函数将 IFormFile 列表转换为我自己的任意数据库文件类列表 将文件数据转换为字节数组的方法是 internal async Task

随机推荐

  • 防止 ModalPopupExtender 在回发期间/之后关闭

    如何防止我的 asp ModalPopupExtender 在回发到服务器之后或期间关闭 这是我的代码 脚本语言 Confirm popup Ok button function OnOk confirmPopup hide ClickSa
  • 如何禁用网络音频分析仪过滤高频

    I am studying the html5 audio API I have noticed the analysis module has problems processing high frequencies It is as i
  • 单个 UILabel 中的粗体和非粗体文本?

    如何在 uiLabel 中同时包含粗体和非粗体文本 我不想使用 UIWebView 我也读过使用 NSAttributedString 可能可以实现这一点 但我不知道如何使用它 有任何想法吗 Apple achieves this in s
  • Mongo查询在mongo shell中有效,但在bash mongo --eval中无效?

    这是一个示例查询 db readings find id s ISODate 2012 11 01T00 05 00Z count 查询在 mongo shell 中工作 但是 在 bash 脚本中或直接在 Ubuntu shell 中 m
  • 龙目岛定制SuperBuilder

    我有两个这样的课程 Builder public class Parent final int a final int b public class static ParentBuilder public ParentBuilder set
  • Bootstrap 3:表格响应式内部显示:表格单元格不起作用

    我有一个场景 在 2 个 div 内有一个 Bootstrap 3 表响应式 一个 div 设置为 display table 另一个设置为 diaplay table cell 这似乎破坏了响应表 这是一个简单的例子 div style
  • 为什么我不能在 XML 文件中对 EditText 的宽度使用 fill_parent?

    当我在 EditText 的宽度上使用 fill parent 时 AndroidStudio 的自动填充显示它被划掉了 如果我仍然尝试使用它 它会将 EditText 扔出屏幕 从而弄乱它的位置 我只想有一个简单的文本字段 旁边有一个输入
  • 如何使用 MATLAB 检查一个椭圆是否在另一个椭圆内部?

    我试图找到两个椭圆的状态 我尝试使用以下代码找到两个椭圆的交集 syms x y a 4 b 2 ellipse1 x 10 2 a 2 y 2 b 2 1 a1 6 b1 5 ellipse2 x 10 2 a1 2 y 2 b1 2 1
  • 在 Linux 上找不到主类 - 类路径问题

    我在 Linux 机器上运行一些 jar 时遇到一些问题 基本上 我收到一个错误 说它找不到我的主 jar 的主类 该类确实存在 因此它一定是类路径问题 我不太擅长Linux 所以我正在寻找一些关于我可能遗漏的地方的建议 首先 我在用户 b
  • 检查一个对象数组是否是另一个对象数组的子集[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 这就是我正在尝试的 var object1 name one psno 34 var object2 name two psno 34 va
  • 在 C# 中禁用屏幕保护程序和电源选项

    我正在用 C 编写一个播放电影的应用程序 我需要弄清楚如何使用 C 禁用屏幕保护程序和电源选项 我知道 Windows SDK API 有一个名为 SetThreadExecutionState 的函数 可以用来执行此操作 但是 我不知道是
  • 如何在 MS Graph API 中组合 NOT 过滤器

    我想在图形 API 用户中搜索名字符合的每个人not从一些值开始 I tried https graph microsoft com v1 0 users filter NOT startswith displayName J https
  • 使用 Typescript 扩展传单标记

    我正在开发一个使用 Typescript 和 Leaflet 的项目 扩展传单标记的记录 JS 方法如下 L Marker Foo L Marker extend 然而 Typescript 抱怨道 Property Foo does no
  • Facebook API 不支持 get 请求

    我正在使用 PHP SDK 发布开放图操作 这些操作中大约有二十分之一会像平常一样出现在墙上 但我无法通过 API 访问或删除它 尝试执行此操作时会出现 不支持的 GET 请求 或 不支持的删除请求 错误 因此 除非用户使用 Faceboo
  • 在 Vim 中覆盖粘贴

    我希望能够从缓冲区粘贴一些东西 可能使用p 但我不想将其插入文本中 而是想替换之前的内容 就像R命令 我搜索了 Google vim 文档和 Stack Overflow 但找不到任何有关此问题的信息 我想这只是一个我不知道的命令 任何帮助
  • Javascript 库能够可靠地加载 Java Applet?

    Flash用户有精彩Swf对象 http code google com p swfobject JavaScript 库 抽象浏览器差异以可靠地将 swf 嵌入到其网页中 有没有像这样的 Java Applet 的 JavaScript
  • C# 防止自定义组合框自动选择项目

    我正在尝试在 C 中实现我自己的 ComboBox 类 因为直到 3 5 NET Framework 如果我没有记错的话 建议使用 StartWith 函数进行查找 即 如果列表包含 Doe John 和用户类型 John 该项目不显示 基
  • SQLAlchemy :在 3 个表的 union_all 的子查询上添加列名前缀

    这是我的mssql代码片段 cnt func count pvr svc ic idn label cnt x session query pvr svc inc type md cnt cast pvr svc crt dt DATE l
  • 最佳文件缓冲区读取大小?

    我正在编写一个需要读取相当大的文件的应用程序 我一直想知道现代 Windows XP 计算机上读取缓冲区的最佳大小是多少 我在 google 上搜索并找到了许多以 1024 作为最佳大小的示例 这是我的意思的一个片段 long pointe
  • .NET 中导致内存碎片的原因

    我正在使用 Red Gates ANTS 内存分析器来调试内存泄漏 它不断警告我 内存碎片可能会导致 NET 预留了过多的可用内存 or 内存碎片影响可分配的最大对象的大小 因为我有强迫症 这个问题必须解决 有哪些标准编码实践有助于避免内存