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

news2024/11/24 11:40:20

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

        本章将介绍可以在 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.coloradmin.cn/o/786529.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C#winform中Icon图标获取方式

文章目录 图标来源格式转换 图标来源 阿里巴巴矢量图库 以“文件夹”图标为例: 格式转换 想要给winform的窗口添加一个图标,可以看到,需要添加.ico的格式。 将上面下载的图标通过wps的图片查看器打开: 点击左上角的属性&…

Docker 的数据管理和镜像的创建(Dockerfile)

目录 一:Docker 的数据管理 1.数据卷 2.数据卷容器 3.容器互联(使用centos镜像) 二:Docker 镜像的创建 1.基于现有镜像创建 (1)首先启动一个镜像,在容器里…

什么是AI和BI?

近日在冲浪时看到一个问题,说“AI和BI都有I,那这两个是一个东西吗?”,想要解答一下发现无从下口,这一下激起了我的“求知欲”,于是我找了一些资料后决定写下这篇文章,打算从几个方面为大家解答一…

生物信息学_玉泉路_课堂笔记_07 第七章 转录组学:基因芯片及RNA_sep数据分析

第七章 转录组学:基因芯片及RNA_sep数据分析 大部分是可以转录的 大概70-80%可Rna 从此区域出来的rna 来看 编码基因 只占据很小的一部分 2%左右 更多的区域转录出来的是非编码rna 转录组学的测序方法 基因芯片 RNA-sep 基因芯片只是了解思想 重点是RNA-sep…

Docker的数据卷、数据卷容器,容器互联

一、数据卷(容器与宿主机之间数据共享) 数据卷是一个供容器使用的特殊目录,位于容器中。可将宿主机的目录挂载到数据卷上,对数据卷的修改操作立刻可见,并且更新数据不会影响镜像,从而实现数据在宿主机与容…

Kubernetes 的核心概念:Pod、Service 和 Namespace 解析

🌷🍁 博主 libin9iOak带您 Go to New World.✨🍁 🦄 个人主页——libin9iOak的博客🎐 🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~&#x1f33…

【更新公告】Airtest更新至1.3.0.1版本

1. 前言 本次更新为Airtest库更新,版本提升至1.3.0.1版本,主要新增了一些iOS设备相关的装包等接口,以及封装了一些tidevice常用接口。更多更新详情,详见我们下文的描述。 2. 新增iOS设备接口 1)iOS安装接口&#xf…

idea springBoot 部署多个项目打开Run Dashboard 窗口

在部署springcloud 项目的时候 本地调试,有可能需要全部启动所有服务,单个部署比较麻烦,通过Run DashBoard 窗口可以完美实现 1.先打开项目的文件地址找到workspace.xml文件,在项目下的.idea\workspace.xml 2. ctrlf 找到RunDash…

tortoiseSVN提交报错记录

tortoiseSVN提交文件时报错:你的主机中的软件中止了一个已建立的连接。 本来是好几个文件和文件夹一起提交的。提交直接报错,网上说的更换网络、退安全软件、关闭防火墙都试过了,没有效果。 偶然看到一个回答说是可能是文件内容的问题&…

基于Hilt的依赖注入跨模块导航框架的Kotlin实现

前提: GitHub链接:GitHub - savelove123/AwesomeNavigation: 基于Hilt的Android页面导航框架 在使用清洁架构MVVM组件化重构现有的项目的时候,为了实现跨模块页面导航,需要使用一个支持跨模块的页面导航组件。原本使用的是阿里巴巴…

图说 SQL 的 JOIN

JOIN 用于多表联查,分为: OUTER JOIN FULL OUTER JOIN LEFT OUTER JOIN RIGHT OUTER JOIN INNER JOIN OUTER 通常省略,所以我们在查询语句中看到的大都是 FULL JOIN、LEFT JOIN、RIGHT JOIN。 为了便于验证说明,下面我在 tem…

每日一题——判断链表中是否有环

题目 判断给定的链表中是否有环。如果有环则返回true&#xff0c;否则返回false。 数据范围&#xff1a;链表长度 0≤n≤10000&#xff0c;链表中任意节点的值满足 ∣val∣<100000 要求&#xff1a;空间复杂度 O(1)&#xff0c;时间复杂度 O(n) 输入分为两部分&#xff0c…

关于tensorflow和pytroch安装的一些坑坑

主要是自己总结记录一下 首先tensorflow的安装 主要先参照的官网 https://docs.anaconda.com/free/anaconda/applications/tensorflow/之后我的项目是需要用到keras的&#xff0c;然后我又去安装keras&#xff0c;出现了Cannot import name ‘dtensor’ from ‘tensorflow.co…

物联网阀控水表计量准确度如何?

物联网阀控水表是一种新型的智能水表&#xff0c;它采用了先进的物联网技术&#xff0c;可以通过远程控制和监测水表的运行情况&#xff0c;实现更加精准的水量计量和费用结算。那么&#xff0c;物联网阀控水表的计量准确度如何呢&#xff1f;下面我们将从以下几个方面进行详细…

树状数组笔记

数组、前缀和、树状数组的区别&#xff1a; 数组&#xff1a;修改某点O&#xff08;1&#xff09;&#xff0c;求区间O&#xff08;n&#xff09; 前缀和&#xff1a;修改某点O&#xff08;n&#xff09;&#xff0c;求区间O&#xff08;1&#xff09; 树状数组&#xff1a;修改…

机器学习实战:Python基于GBM梯度提升机进行预测(十四)

这篇干货很硬&#xff0c;喜欢的小伙伴点个赞/收藏&#xff0c;持续更新&#xff01; 文章目录 1.前言1.1 GBM的介绍1.2 GBM的应用 2. scikit-learn实战演示2.1 分类问题2.2 回归问题 3. GBM超参数3.1 决策树数量&#xff08;n_estimators&#xff09;3.2 样本数量&#xff08…

网络设备中的配置文件管理

建立强大网络的第一步是为灾难和网络中断做好准备&#xff0c;许多企业在中断期间遭受损失&#xff0c;因为他们缺乏备份计划并且配置管理不达标&#xff0c;使用配置文件管理工具进行适当的配置文件管理不仅有助于处理网络中断&#xff0c;还有助于优化网络性能。 使用配置文…

Cilium

Cilium是一个开源的、面向Kubernetes和容器环境的网络插件&#xff0c;用于提供高级的网络和安全功能。它是一个用于容器网络和网络层四、七层安全的项目&#xff0c;旨在简化网络和安全层的管理&#xff0c;并提供高性能和低延迟的数据包处理。Cilium通过BPF&#xff08;Berke…

Windows 使用批处理脚本 kill 进程

使用 jenkins 构建 SpringBoot 项目时&#xff0c;需要增加 kill 进程的功能&#xff0c;否则再次启动时会失败&#xff0c;提示端口被占用。 Windows 平台的脚本 命令 for /f "tokens5" %%p in (netstat /anop tcp ^| findstr /i 8007 ^| findstr /i listening) do…

2023 7.24~7.30 周报 (VelocityGAN)

目录哟 0 上周回顾1 本周计划1.1 论文背景 2 完成情况2.1 背景简述2.2 网络结构: 生成器 (Generator)2.3 网络结构: 判别器 (Discriminator)2.4 损失函数: Loss2.5 OpenFWI中的VelocityGAN与它的核心代码2.5.1 判别器loss2.5.2 生成器loss2.5.3 训练的配置顺序 2.6 复现结果 3 …