Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >具有大量并行任务的WPF GUI性能

具有大量并行任务的WPF GUI性能
EN

Stack Overflow用户
提问于 2016-12-14 02:35:31
回答 3查看 424关注 0票数 0

我开发了一个小客户端(WPF)来对我们的系统进行一些压力测试。本质上,它必须并行地调用Asp.Net WebApi端点上的各种方法。

每次按下"Start“,它都会生成4000个任务(异步等待),同时请求压力,等待直到它们全部完成,然后再这样做-直到用户单击停止按钮。GUI使用进度条和一些计数器进行修饰:错误的请求、已完成的请求、正在进行的请求。我获得这些信息是因为发出一批压力请求的对象公开了一些事件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var stressTestTask = new stressTestTask(LogService, configuration);

stressTestTask.ErrorRequestCountChanged += stressTestTask_ErrorRequestCountChanged;
stressTestTask.GoodRequestCountChanged += stressTestTask_GoodRequestCountChanged;
stressTestTask.TryRequestCountChanged += stressTestTask_TryRequestCountChanged;

_executionCancellationToken = new CancellationTokenSource();

await Task.Run(
    () => stressTestTask.ApiStressTestTask(_executionCancellationToken.Token),
    _executionCancellationToken.Token);

整个执行是从一个ICommand (MVVM)开始的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private RelayCommand _startCommand;
public RelayCommand StartCommand
{
    get
    {
        return _startCommand ?? (_startCommand = new RelayCommand(
            async () =>
            {
                await StartStressTest();
            }));
    }
}

RelayCommand是库Mvvm-LightICommand的一个实现。

我不明白的是这种行为:如果我用“低”数量的任务配置我的批任务,例如2000年,GUI在执行时不会冻结。如果我选择5000项任务,过一段时间它就会结冰。如果打开客户端的.exe的另一个实例,并在每个实例上选择2000,则GUI在这两个方面都具有响应性。

我的第一个问题是:为什么用x任务打开一个实例在响应性方面比用x/n任务打开n实例更糟糕?这是否与Windows Scheduler有关,以及在第一种情况下,我只有一个进程?

我的第二个问题是:如何解决这个问题,使一切都在一个GUI上工作?我考虑用一批压力测试创建一个控制台应用程序,并从GUI中为我想要的每个实例调用一个命令,以便为每个批生成一个进程。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-12-14 02:43:48

您是否通过调用UI上下文来处理这些API事件?如果有许多调用发生,您将向调度程序注入大量操作,并导致UI挂起并落后于用户输入。

尝试批量更新UI。

票数 1
EN

Stack Overflow用户

发布于 2016-12-14 04:50:07

我的第一个问题是:为什么用x任务打开一个实例比用x/n任务打开n个实例更糟糕?

可能是因为在UI线程上要处理更多的事件。我想您的ErrorBetCountChanged、GoodRequestCountChanged和TryRequestCountChanged事件处理程序是在UI线程上调用的,引发的许多事件可能会淹没UI线程。

作为Gusdor sugget,您可能会找到一种批量更新的方法。看看反应性扩展(Rx):WhyRx.html

它有一个可能派上用场的缓冲区方法:TimeShiftedSequences.html

它还有en Obervable.FromEvent方法,您可以使用它将事件转换为IObservable:https://msdn.microsoft.com/en-us/library/hh229241(v=vs.103).aspx

我的第二个问题是:如何解决这个问题,使一切都在一个GUI上工作?

您需要找到一种方法-一种或指定者-更新UI的频率较低。批处理更新和事件应该是一个很好的起点。另一种选择是增加较少的通知。也许你需要两者兼得。

票数 1
EN

Stack Overflow用户

发布于 2016-12-14 02:57:02

我如何解决这个问题,使一切都在一个GUI上工作呢?

以“适当的”异步方式发送API请求--等待方式只有一个线程。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private async Task SendStressRequests()
{
    var tasks = new List<Task>();
    for (int i = 0; i < 4000; i++)
    {
        var task = SendApiRequestAsync();
        tasks.Add(task);
    }

    await Task.WhenAll(tasks);
    // Update UI with results
}    
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41140414

复制
相关文章
具有依赖关系的并行操作执行
今天看到看到一篇MSDN文章《Parallelizing Operations With Dependencies》,作者是微软Parallel Computing Platform团队的一个开发经理。文中提供出一种用于并行执行一组具有依赖关系的操作的解决方案,这不由得想起我在一年之前写的一个具有相同的功能的组件。于是翻箱倒柜找了出来,进行了一些加工,与大家分享一下。 一、问题分析 我们知道,较之串行化的操作,并行计算将多个任务同时执行,从而充分利用了资源,提高了应用的整体性能。对于多个互不相干的操作,我们
蒋金楠
2018/01/16
2.7K0
具有依赖关系的并行操作执行
数据并行和任务并行
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhouxuanyuye/article/details/79949409
yaphetsfang
2020/07/30
1.8K0
数据并行和任务并行
具有依赖关系的并行操作执行
今天看到看到一篇MSDN文章《Parallelizing Operations With Dependencies》,作者是微软Parallel Computing Platform团队的一个开发经理。文中提供出一种用于并行执行一组具有依赖关系的操作的解决方案,这不由得想起我在一年之前写的一个具有相同的功能的组件。于是翻箱倒柜找了出来,进行了一些加工,与大家分享一下。
javascript.shop
2019/09/04
6K0
具有依赖关系的并行操作执行
用 PyQt 打造具有专业外观的 GUI
如果您一直在创建表单以执行将数据输入数据库等操作,那么QFormLayout适合您。此类将小部件布置为两列布局。第一列通常显示描述预期输入的标签,第二列通常包含允许用户输入或编辑数据的输入小部件,例如QLineEdit,QComboBox或QSpinBox。
sergiojune
2021/07/19
2.8K0
用 PyQt 打造具有专业外观的 GUI
C#数据并行和任务并行
      Paraller.For()方法类似于C#的for循环语句,也是多次执行一个任务。使用Paraller.For()方法,可以并行运行迭代,迭代的顺序没有定义。
yaphetsfang
2020/07/30
1.6K0
C#数据并行和任务并行
Python 并行任务技巧
Python的并发处理能力臭名昭著。先撇开线程以及GIL方面的问题不说,我觉得多线程问题的根源不在技术上而在于理念。大部分关于Pyhon线程和多进程的资料虽然都很不错,但却过于细节。这些资料讲的都是虎头蛇尾,到了真正实际使用的部分却草草结束了。
用户7886150
2020/12/29
8070
并行执行任务
在app列表首页,展示多个item,并有分页;而每个item里后台都会调用一个http请求,判断当前item的状态
LiosWong
2018/10/29
7100
谈谈Java任务的并行处理
谈到并行,我们可能最先想到的是线程,多个线程一起运行,来提高我们系统的整体处理速度;为什么使用多个线程就能提高处理速度,因为现在计算机普遍都是多核处理器,我们需要充分利用cpu资源;如果站的更高一点来看,我们每台机器都可以是一个处理节点,多台机器并行处理;并行的处理方式可以说无处不在,本文主要来谈谈Java在并行处理方面的努力。
本人秃顶程序员
2019/04/22
1.5K0
谈谈Java任务的并行处理
任务调度的并行算法
如果串行是肯定不行的。我们可以考虑并行策略,但是开了并行,怎么能够充分利用资源比较好呢。
jeanron100
2018/07/26
9890
并行执行任务思考
这篇文章由之前的并行执行任务发展而来,如何生成task,在之前的文章中,生成task方式如下:
LiosWong
2018/10/29
4820
bash维护并行下载任务
cat urlfile|while read i;do #循环一个文件中下载链接 while [ jobs |wc -l -eq 20 ] ;do #判断后台下载任务数量是否在20个,如果是则等待一段时间,否就新增一个下载任务 echo 'waitting...' sleep 1; done wget $i --timeout=20 & #启动一个下载任务 done</pre>
用户7108768
2021/10/29
2730
教你优雅的实现 SpringBoot 并行任务
点击上方“芋道源码”,选择“设为星标” 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 10:33 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | Java 2021 超神之路,很肝~ 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网络应用框架 Netty 源码解析 消息中间件 RocketMQ 源码解析 数据库中间件 Sharding-JDBC 和 MyCAT 源码解析 作业调度中间件 Elastic-Job 源码解析 分布式事务中间件 TCC-Transaction
芋道源码
2022/07/04
3550
教你优雅的实现 SpringBoot 并行任务
并行编程和任务(一)
  并发、并行。同步、异步、互斥、多线程。我太难了。被这些词搞懵了。前面我们在写.Net基础系列的时候写过了关于.Net的异步编程。那么其他的都是些什么东西呀。今天我们首先就来解决这个问题。把这些词搞懂搞透。理清逻辑。然后最后我们进入并行编程的介绍。
小世界的野孩子
2019/11/07
9120
并行编程和任务(一)
并行编程和任务(二)
  上一篇我们主要介绍了并行编程相关的知识,这一节我们继续介绍关于任务相关的知识。为了更好的控制并行操作,我们可以使用System.Threading.Tasks中的Task类。我们首先来了解是什么是任务——任务表示将要完成的一个或某个工作单元,这个工作单元可以在单独线程中运行,也可以使用同步方式启动运行(需要等待主线程调用)。为什么使用任务呢?——任务不仅可以获得一个抽象层(将要完成的工作单元)、还可以对底层的线程运行进行更好更多的控制(任务的运行)。
小世界的野孩子
2019/11/10
6690
教你优雅的实现 SpringBoot 并行任务
从控制台输入的结果中我们可以看出所有的定时任务都是在同一个线程池用同一个线程来处理的,那么我们如何来并发的处理各定时任务呢,请继续向下看。
二哥聊运营工具
2022/12/12
9190
教你优雅的实现 SpringBoot 并行任务
WPF 性能测试
本文收藏我给 WPF 做的性能测试。在你开始认为 WPF 的性能存在问题的时候,不妨来这篇博客里找找看我做过的测试。我记录的测试都是比较纯净的测试项目,没有业务逻辑的干扰,写法也正常,可以更加真实反映 WPF 的性能,减少因为奇怪的业务逻辑以及逗比的写法的影响
林德熙
2023/04/07
5150
并行执行任务的ForkJoin框架简介
从JDK1.7开始,Java提供Fork/Join框架用于并行执行任务,它的思想就是讲一个大任务分割成若干小任务,最终汇总每个小任务的结果得到这个大任务的结果。
一个会写诗的程序员
2019/07/15
1K0
并行执行任务的ForkJoin框架简介
WPF 高性能笔
如果需要经过路由事件才收到输入,如果有人在路由事件做了很多需要很长事件的代码,那么等待用户的路由事件就会使用很长的时间。
林德熙
2018/09/19
7630
HLS之任务级并行编程
Vitis HLS 2022.2新增了hls::task库,以一种简单的方式创建纯净的stream kernel模型,即任务的输入/输出只能是hls::stream或hls::stream_of_blocks。这大大减少了使用C++模拟并行处理模型时对stream是否为空的检查。
Lauren的FPGA
2023/08/18
6810
HLS之任务级并行编程
wpf绘图性能分析
添加10000个图形节点大约1-2s,10w个图形需要5-6s,还是很慢,绘制的时候会调用gpu,但效率没提升多少,使用drawvisual还有一个问题是内存很高。
sofu456
2022/10/31
1K0
wpf绘图性能分析

相似问题

具有大量元素的WPF绘图性能

46

并行处理大量任务

26

大量小任务的并行处理

12

WPF中的并行任务

23

具有大量任务的ExecutorService

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文