【C#】并行编程实战:使用 Visual Studio 调试任务

并行编程可以提高应用程序的性能,但是调试起来会更困难,这一点在之前的章节中我们已经有了很直观的感受。对于程序而言,保证程序的正确性和保证性能同样重要。

本章将介绍可以在 Visual Studio 中的调试工具(包括 Thread 窗口、Tasks 窗口和 Concurrency Visulizer)调试线程。实际上在我看来使用 VS 进行调试并不理想,对于我们 Unity 程序来说有更好的方式。但是技多不压身,了解一下也是可以的。

本教程学习工程:魔术师Dix / HandsOnParallelProgramming · GitCode


1、使用 Visual Sutdio 2019 2022 进行调试

书上用的是 VS2019,但是都什么年代了,还在使用 2019 ? 我们直接上 2022 !

线程调试窗口打开方式如下:

调试 -> 窗口 -> 线程。

之后我们打上断点就能调试了,线程窗口如下所示:

PS:在 VS2022 中对 Untiy 打断点的方式为:调试 -> 附加 Unity 调试程序。

2、如何调试线程

当使用多个线程时,找出在特定时间执行的是哪个线程就变得很重要,这使得我们能解决跨线程问题以及竞争状况。

线程打开如图所示,也可以显示断点。最左边的小旗子,表示标记线程。可以选择左边小旗子标记,然后就能选择只显示标记的线程。如果线程特别多的情况,这会非常方便。

还有一个小窗口,在 调试 -> 窗口 -> 并行堆栈窗口,可以查到并行堆栈之类。

但是我实际用起来感觉作用不大,因为我最需要的2个功能:如何查看多线程的错误?如何查看多线程利用率?这两个窗口都无法显示出来,而且是只有断点的情况才会生效。

3、并发可视化器 Concurrency Visualizer

书上提到了一个工具 Concurrency Visualizer ,我们可以直接在拓展中搜索,并安装到 VS 2022 上:

安装没有什么好说的,安装完了我们在 分析 -> 并发可视化工具中使用。

选择附加到进程,并找到我们的程序即可。之后系统会自动收集数据,然后我们运行 Unity 。当我们不需要测试时,停止收集,就能得到一个可视化的面板,表示性能:

我们可以从里面看到各种参数、线程的消耗等。

相关介绍可以看篇文档:

利用VisualStudio2010中的ConcurrencyVisualizer优化性能 - 百度文库https://wenku.baidu.com/view/840f5972ab956bec0975f46527d3240c8547a176.html?wkts=1690171463334&bdQuery=Concurrency+Visualizer

我的评价:没用,不如 Unity 的 Profile 。


4、本章小节

本章简单介绍了几个调试工具和窗口,但是我感觉都没啥大用。如果只是为了看堆栈,普通的断点也能调试进去。如果看性能的话,显然 Unity 的 Profile 是更好的选择。至于如何使用 Unity Profile 看多线程的性能,这个我们后面再介绍。

总之都是非常鸡肋。

本教程学习工程:魔术师Dix / HandsOnParallelProgramming · GitCode**

相关推荐
是翔仔呐19 分钟前
第11章 显示外设驱动:I2C协议OLED屏、SPI协议LCD屏字符/图片/中文显示
c语言·开发语言·stm32·单片机·嵌入式硬件·学习·gitee
_李小白20 分钟前
【AI大模型学习笔记之平台篇】第五篇:Trae常用模型介绍与性能对比
人工智能·笔记·学习
CSharp精选营29 分钟前
值类型与引用类型:别再只背“栈和堆”了,看这 4 个实际影响
c#·.net·值类型·引用类型·栈和堆·编程指南
承渊政道39 分钟前
【优选算法】(实战体会位运算的逻辑思维)
数据结构·c++·笔记·学习·算法·leetcode·visual studio
AI-Ming1 小时前
程序员转行学习 AI 大模型: 踩坑记录:服务器内存不够,程序被killed
服务器·人工智能·python·gpt·深度学习·学习·agi
m0_716765231 小时前
C++提高编程--STL常用容器(set/multiset、map/multimap容器)详解
java·开发语言·c++·经验分享·学习·青少年编程·visual studio
2501_945318491 小时前
零基础学习AI的选型指南:CAIE认证与编程型AI认证如何取舍
人工智能·学习
承渊政道1 小时前
【优选算法】(实战推演模拟算法的蕴含深意)
数据结构·c++·笔记·学习·算法·leetcode·排序算法
Keep learning!1 小时前
PCA主成分分析学习
学习·算法
浮白载笔的夜晚2 小时前
【科普向】模拟电路(Analog Circuits)与射频电路(RF Circuits)的区别
学习