【发布时间】:2021-01-23 03:51:24
【问题描述】:
使用Visual Studio Concurrency Visualizer 我现在明白为什么切换到Parallel.For 没有任何好处:只有 9% 的时间机器忙于执行代码,其余时间是 71% 的同步和 17% 的内存管理 (1)。
检查下图中的所有橙色条纹,我发现始终涉及 GC (2)。
阅读完所有这些有趣的话题后……
.. 我是否正确假设所有这些线程都需要使用单个内存管理对象,因此无需在堆上分配对象我的场景会大大改善?比如用结构体代替类、数组代替动态列表等?
我有很多工作要做,才能让我的代码朝着这个方向发展。只是想在开始之前确定一下。
【问题讨论】:
-
介意分享一些代码吗?
-
是的,分配较少可能会对您的资源和效率产生很大的好处,但这主要是总是在热路径上的情况 和 thrashed 应用程序
-
说这不是你可以用来减少应用程序分配的唯一工具。一个好的 memory profiler 将大有帮助,结合学习如何读取结果并根据结果影响更改。创建最小分配代码是一门艺术,值得你学习
-
我明白了。那么迈克尔的 cmets 基本上就是你的答案。
-
Just wanted to be sure before starting.简短回答 - 你不能 100% 确定。多线程代码需要基准测试 - 有一些技术倾向于运行良好 - 但不能保证。它们可能在某些机器和工作负载上运行良好,但在其他机器和工作负载上运行良好。基准测试将是必不可少的。
标签: c# .net multithreading performance locking