POPPUR爱换

 找回密码
 注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

搜索
查看: 3818|回复: 20
打印 上一主题 下一主题

我写了个.Net的性能测试程序,感慨颇多

[复制链接]
跳转到指定楼层
1#
发表于 2011-12-22 03:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 doocoo 于 2011-12-22 03:25 编辑

很简单,两个按钮,一个标签,一个文本框。
文本框用来跟踪运行情况,标签显示结果,两个按钮分别是单线程和多线程测试。
算法也很简单,给一段文字,然后循环1000万次计算MD5。

有什么感慨呢?
一是多线程程序真TM难写。这还是C#写的,要是C++估计难十倍不止。
二是多线程真的很有用。单线程的运行时间比多线程高出4-5倍。而且即便是单线程,也不会影响其它程序的运行。
三是Windows对CPU的调度很有意思,似乎对单线程的应用,也是在各个核心间分摊计算。但是又不平均,不知道是什么机制。

结论是:
多核以及超线程对性能提升很大。但是编写相当困难。线程间的交互尤其困难。要开发充分利用多核处理器能力的应用程序真不容易。

我打算优化一下,增加一些测试方法。放出来给大家试试。
2#
发表于 2011-12-22 08:02 来自手机 | 只看该作者
代码呢?哈哈
回复 支持 反对

使用道具 举报

3#
发表于 2011-12-22 11:16 | 只看该作者
这个用C#应该很容易写吧,有没有数据交换,也不需要管什么线程安全之类的麻烦事。
回复 支持 反对

使用道具 举报

4#
发表于 2011-12-22 11:58 | 只看该作者
支持楼主啊,呵呵
回复 支持 反对

使用道具 举报

5#
发表于 2011-12-22 12:36 | 只看该作者
用C++才简单呢,线程一切尽在掌握中
回复 支持 反对

使用道具 举报

6#
发表于 2011-12-22 12:37 | 只看该作者
不涉及线程同步,很简单
回复 支持 反对

使用道具 举报

7#
发表于 2011-12-22 12:45 | 只看该作者
不涉及加锁、同步,openmp的话加一行声明就可以了,lz还是入门级啊。
单线程时在不同核心切换是为了保证各核心的热平衡。
回复 支持 反对

使用道具 举报

8#
 楼主| 发表于 2011-12-22 13:35 | 只看该作者
scim 发表于 2011-12-22 12:45
不涉及加锁、同步,openmp的话加一行声明就可以了,lz还是入门级啊。
单线程时在不同核心切换是为了保证各 ...

我本身不是程序员,刚入门,感觉好难。
原本想在负责计算的方法中加一个功能,往textBox里写跟踪信息,谁知道不允许跨线程调用。要Invoke什么的。太麻烦,就放弃了。
回复 支持 反对

使用道具 举报

9#
发表于 2011-12-22 14:02 | 只看该作者
计算型的多线程程序相对还是比较好写的
回复 支持 反对

使用道具 举报

10#
发表于 2011-12-22 14:05 | 只看该作者
doocoo 发表于 2011-12-22 13:35
我本身不是程序员,刚入门,感觉好难。
原本想在负责计算的方法中加一个功能,往textBox里写跟踪信息,谁 ...

如果确定不会出现冲突的话
this.CheckForIllegalCrossThreadCalls = false;
回复 支持 反对

使用道具 举报

11#
发表于 2011-12-22 14:19 | 只看该作者
你这个 计算多少次的还算简单的,如果是 下面的运算需要用到前面的计算结果的,那基本是用不到多核心、多线程了,现在的各种软件也只是其他部分比如渲染的、或者其他操作交给另外的核心,本质还是一个核心工作的。多核心现在的优势在于 多个任务处理的时候,对于同一个操作起不到多少作用。
回复 支持 反对

使用道具 举报

12#
发表于 2011-12-22 19:13 | 只看该作者
doocoo 发表于 2011-12-22 13:35
我本身不是程序员,刚入门,感觉好难。
原本想在负责计算的方法中加一个功能,往textBox里写跟踪信息,谁 ...

界面的UI元素只允许创建它的线程也就是UI线程调用,这是定死的,要不程序很容易一团糟的,不论winform还是wpf/sl什么的都一样。Invoke的调用也超简单,结合lambda一行代码搞定,哪里有什么麻烦。
回复 支持 反对

使用道具 举报

13#
发表于 2011-12-22 20:22 | 只看该作者
楼主直接用汇编吧
回复 支持 反对

使用道具 举报

14#
发表于 2011-12-22 22:12 | 只看该作者
本帖最后由 xeon-pan 于 2011-12-22 22:13 编辑
FENG950 发表于 2011-12-22 19:13
界面的UI元素只允许创建它的线程也就是UI线程调用,这是定死的,要不程序很容易一团糟的,不论winform还是 ...

初哥觉得难不奇怪 = =,最主要是因为不理解。 很多初哥一看lambda直接傻眼的

另外c#其实做单台机上这种程度的多线程和c++比真的没啥特别大优势,你要把任务分到好几台机一起做,那.net实在是简单太多了。。。。
回复 支持 反对

使用道具 举报

15#
发表于 2011-12-22 22:17 | 只看该作者
顶一下初级corer
回复 支持 反对

使用道具 举报

16#
发表于 2011-12-22 23:02 | 只看该作者
用sql试试?
回复 支持 反对

使用道具 举报

17#
发表于 2011-12-23 03:09 | 只看该作者
就你说的这个程序,多线程测试md5,C++比C#容易10倍.直接openmp或者甚至pthread都可以
回复 支持 反对

使用道具 举报

18#
发表于 2011-12-23 10:18 | 只看该作者
yoyofuture88 发表于 2011-12-22 14:19
你这个 计算多少次的还算简单的,如果是 下面的运算需要用到前面的计算结果的,那基本是用不到多核心、多线 ...

那游戏的多核优化 怎么说?
回复 支持 反对

使用道具 举报

19#
发表于 2011-12-23 11:23 | 只看该作者
有支持AVX的打算不?
回复 支持 反对

使用道具 举报

20#
发表于 2011-12-23 12:27 | 只看该作者
kjceva 发表于 2011-12-23 10:18
[unsure>那游戏的多核优化 怎么说?

那个是同一个画面渲染异步啊,是可以用到多核心的。你渲染一个画面,可以切割成N 部分来渲染啊,下面的画面不需要上面的画面结果。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

广告投放或合作|网站地图|处罚通告|

GMT+8, 2025-2-4 13:49

Powered by Discuz! X3.4

© 2001-2017 POPPUR.

快速回复 返回顶部 返回列表