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

news/2024/11/17 22:43:51/

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

        本章将介绍可以在 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


http://www.ppmy.cn/news/977591.html

相关文章

jmeter-断言

断言作用:让脚本自动化执行过程中,能够自动判定执行结果是否正确,需要添加断言 响应断言 添加方式:测试计划–》线程组–》HTTP请求–》(右键添加)断言–》响应断言 案例 请求:https://www.baidu.com 检查:让程序检查…

云端环境跑通BaseLine

云端环境跑通BaseLine 一、实验流程实践 1.报名 报名日期:2023年7月17日,参与AI夏令营第一期 彳 z h i 亍 c h u ,都为第四声 \overset{zhi}{彳}\overset{chu}{亍},都为第四声 彳zhi亍chu,都为第四声 怎么报名的&a…

MySQL 主从复制的认识 2023.07.23

一、理解MySQL主从复制原理 1、概念:主从复制是用来建立一个和 主数据库完全一样的数据库环境称为从数据库;主数据库一般是准实时的业务数据库。 2、作用:灾备、数据分布、负载平衡、读写分离、提高并发能力 3、原理图 4、具体步骤 (1) M…

uni-app:切换页面刷新,返回上一页刷新(onShow钩子函数的使用)

切换页面刷新:通过onShow()便可实现 返回上一页通过uni.navigateBack({delta: 1});实现 以返回上一页刷新为例 从B页面返回上一页到A页面 在A页面写入方法refreshHandler() methods: { // 执行刷新逻辑refreshHandler() {uni.request({url: getApp().globalData.…

Java面试题总结记录(3)—— Spring篇

1、什么是Spring? Spring 是个java企业级应用的开源开发框架。Spring主要用来开发Java应用,但是有些扩展是针对 构建J2EE平台的web应用。 Spring 框架目标是简化Java企业级应用开发,并通过 POJO为基础的编程 模型促进良好的编程习惯 2、你们项…

idea复制一份web服务在不同端口启动

Idea 运行多个微服务 Idea 一个服务开启多个端口运行 idea 开启多个端口服务_idea开启多个服务_HaHa_Sir的博客-CSDN博客 IntelliJ IDEA 中一个服务按多个端口同时启动与显示Services面板_一个服务多个端口_Touch&的博客-CSDN博客 Idea中一个服务按多个端口同时启动_idea…

element-ui form表单的动态rules校验

在vue 项目中,有时候可能会用到element-ui form表单的动态rules校验,比如说选择了哪个选项,然后动态显示或者禁用等等。 我们可以巧妙的运用element-ui form表单里面form-item想的校验规则来处理(每一个form-item项都可以单独校验…

2023年深圳杯数学建模赛题浅析

由于今明两日由于一些不可避免的事情,这里仅仅先给大家简单写一个赛题浅析,详细过程步骤思路以及讲解视频预计后天发布 A题 影响城市居民身体健康的因素分析 A题以慢性病为命题背景,给出数据以及题目初步来看来看为一个数据处理数据分析的综…