如何在高并发代码中提高 .NET 4.0 的垃圾收集器性能?

2023-12-26

我正在使用 .NET Framework 4 中的任务并行库(特别是Parallel.For and Parallel.ForEach)但是,在并行化某些看起来应该在双核计算机上轻松并行化的任务时,我得到的速度非常平庸。

在分析系统时,由于垃圾收集器的原因,似乎存在大量线程同步。我正在进行大量的对象分配,所以我想知道如何提高并发性,同时最大限度地减少代码重写。

例如,在这种情况下是否有一些有用的技术:

  • 我应该尝试手动管理 GC 吗?
  • 我应该使用Dispose?
  • 我应该固定物体吗?
  • 我应该做其他不安全的代码技巧吗?

后记:

问题不在于 GC 运行得太频繁,而在于 GC 阻止了并发代码有效地并行运行。我也不认为“分配更少的对象”是一个可以接受的答案。这需要重写太多代码来解决并行性较差的垃圾收集器。

我已经找到了一个有助于整体性能的技巧(使用 gcServer http://blogs.msdn.com/visualizeparallel/archive/2009/12/28/parallel-performance-case-study-finding-references-to-parallel-extensions.aspx)但它对并发性能没有帮助。换句话说Parallel.For在一项令人尴尬的并行任务中,仅比串行 For 循环快 20%。

后记:

好吧,让我进一步解释一下,我有一个相当大且复杂的程序:优化解释器。它足够快,但我希望在给定并行任务(我的语言中内置的原始操作)时其性能能够随着更多核心可用而很好地扩展。我在评估过程中分配了很多小物体。整个解释器设计基于从单个多态基础对象派生的所有值。这在单线程应用程序中效果很好,但是当我们尝试将任务并行库应用于并行计算时,没有任何优势。

在对任务并行库为何未在这些任务的核心之间正确分配工作进行了大量调查后,罪魁祸首似乎是 GC。显然,GC 似乎是一个瓶颈,因为它在幕后进行了一些我不理解的线程同步。

我需要知道的是:GC 到底在做什么,会导致大量并发的代码在进行大量分配时表现不佳,以及我们如何解决这个问题以外只是分配更少的对象。我已经想到了这种方法,并且需要对大量代码进行重大重写。


如果由于分配/GC 的对象太多而导致 GC 运行过于频繁,请尝试分配更少的对象:)

根据您的场景 - 尝试重用现有对象,创建对象池,使用不会造成太大内存压力的“较轻”对象(或更大的对象以减少分配的对象数量)。

不要尝试通过显式调用 GC.Collect 来“管理 GC”,它很少有回报(里科·马里亚尼这么说 http://blogs.msdn.com/ricom/archive/2004/11/29/271829.aspx)

or http://blogs.msdn.com/ricom/archive/2003/12/02/40780.aspx http://blogs.msdn.com/ricom/archive/2003/12/02/40780.aspx

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

如何在高并发代码中提高 .NET 4.0 的垃圾收集器性能? 的相关文章

随机推荐

  • 将图像从 3d 视角重绘为 2d

    我需要用 Pascal Delphi Lazarus 编写的逆透视变换 请参见下图 我想我需要遍历目标像素 然后计算源图像中的相应位置 以避免舍入误差等问题 function redraw 3d to 2d sourcebitmap tbi
  • WPF C# 按钮样式

    有人知道如何在 WPF 中重新创建此按钮样式吗 因为我不知道如何制作不同的隔间 以及两种不同的文本和文本样式 要解决你的问题肯定需要使用Style and Template为了Button 但他到底长什么样呢 决定可能有几个 例如 Butt
  • 在 SQLPlus 中设置查询输出的格式

    我目前正在使用 SQLPlus 每当我查询数据库时 结果都是一团糟 换句话说 它很难读 我想知道是否有人知道如何在 Unix 服务器上运行的 SQLPlus 中格式化查询的输出 列 表等 但是 我正在从 Windows 访问服务器 而且 谁
  • 使用 wicked_pdf gem 和 wkhtmltopdf 在 PDF 上显示图像标题

    我的控制器 def show respond to do format format pdf do render pdf gt show template gt welcome show footer gt right gt Page pa
  • 在迭代期间查找文件中的位置

    我正在尝试使用f tell 在迭代期间的普通文本文件中 with open test txt as f for line in f print f tell 我收到以下错误 Traceback most recent call last F
  • 删除工具栏和选项卡布局之间的空间间隙

    我在一个片段中有一个带有 TabLayout 的 AppBarLayout 该片段位于具有工具栏的 Activity 中 但是toolbar和TabLayout之间出现了一个空格 我不知道它来自哪里 片段包 xml
  • Java 关闭钩子

    我已将以下代码添加到我的程序中 Runtime getRuntime addShutdownHook new Thread new Runnable Override public void run System out println e
  • 如何使用钩子更改子组件的道具?

    我想使用反应钩子更改道具 并且我找到了将 setState 函数作为道具传递给孩子的方法 容器 tsx const Container React FC gt const num setNum useState 0 return
  • Seaborn 条形图中的垂直线代表什么?

    我正在尝试使用 Seaborn 因子图tutorial http stanford edu mwaskom software seaborn tutorial categorical linear models html 以下代码创建一个带
  • 通过catch(...)从SEH异常中获取有意义的信息?

    早上好 编辑 这不是重复的 因为它具体涉及 SEH 而不是代码级引发的异常 我正在使用 SEH 来捕获一些不可靠的库引发的硬件错误 我想从包罗万象的异常中获取更多信息 下面的代码模拟了我正在做的事情 正如你所看到的 我正在使用 boost
  • 使用 Tridion Query 实施全文搜索

    我必须对基于 SDL Tridion WCMS 的网站实施全文搜索 对于如何使用 Tridion Query 实现全文搜索有什么建议或想法吗 SDL Tridion Content Delivery API 设计用于基于系统或自定义元数据和
  • DotLiquid/Liquid 访问字典

    我在用点液体 http github com formosatek dotliquid 模板引擎并尝试访问模板中的字典值 我已经将这个下降传递给模板 public class SomeDrop Drop public Dictionary
  • 当通过 QueryString 设置区域性时,本地化有效,但当区域性在路由中时则无效

    这是我的路线 app UseMvc routes gt routes MapRoute name defaultWithCulture template culture fa IR controller action Index id 但当
  • java.lang.IllegalArgumentException:服务未注册

    我有一个包含 webview 的应用程序 一切都很顺利 但在 android studio 的运行选项卡中 我收到以下消息 我的应用程序仍然运行良好 但它仍然困扰着我 我对这条消息了解不多 Exception thrown while un
  • PHP cURL 不存储会话 cookie...如何解决这个问题?

    我正在制作一个类来与我们公司的 API 进行通信 我使用curl 来发布数据并检索json 格式的响应 在代码的最后一部分 课后 我将用户登录到服务器 它给出了 true 但是当我尝试使用curl再次连接时 他说我没有登录 我已经完成了谷歌
  • 如何在路线更改时关闭导航菜单

    With react router dom 如何检测用户何时导航到新页面 我目前正在使用 react router dom 4 2 2 and react 15 6 1 我想在用户选择新的目标 URL 时关闭移动导航菜单 但我无法检测路线何
  • Android 位置“去散步”本身

    我正在研究一个项目的 GPS 部分 我想通过社区获得一些东西 我搜索了所有典型的 GPS 跳跃和漂移 并努力改进我得到的数据 但上周我得到了一些非常奇怪的数据 我无法确定 The application basically has a fo
  • UITableView 单元格中的图像不支持tintColor

    我有一个UITableView它由静态单元组成 在IB中我已经设置了每个UITableViewCell的样式为 Basic 并设置图像 参见屏幕截图 我的导航栏中的按钮尊重tintColor属性 但表视图中的图像没有 到目前为止 我已经完成
  • Python Pandas DataFrame 仅存储一个数字?

    AzureML 的 Python 脚本模块需要返回 Pandas DataFrame 我只想返回一个值 我这样做 result 7 dataframe1 pd DataFrame numpy zeros 1 dataframe1 0 0 r
  • 如何在高并发代码中提高 .NET 4.0 的垃圾收集器性能?

    我正在使用 NET Framework 4 中的任务并行库 特别是Parallel For and Parallel ForEach 但是 在并行化某些看起来应该在双核计算机上轻松并行化的任务时 我得到的速度非常平庸 在分析系统时 由于垃圾