C#程序优化

fyjin99 2010-06-01 03:23:20
小弟用C#写了一个程序,老大嫌速度慢,让优化一下。本人接触C#不久,请各位大佬给点优化意见(VS2005,单线程,不涉及多线程的操作)。
...全文
992 34 打赏 收藏 转发到动态 举报
写回复
用AI写文章
34 条回复
切换为时间正序
请发表友善的回复…
发表回复
無_1024 2010-10-14
  • 打赏
  • 举报
回复
那么VS2008 呢?谁知道
fyjin99 2010-06-03
  • 打赏
  • 举报
回复
看了金旭亮老师的文章好像并行处理对这种简单的加加减减反而会费时,并行处理该在什么地方优化?
fyjin99 2010-06-02
  • 打赏
  • 举报
回复
System.Threading.Tasks.Parallel.For(lowr,topr,rpara)
{
for (int cpara = lowc; cpara <= topc; cpara++)
{
if (T2[cpara, rpara] > max) max = T2[cpara, rpara];
if (T2[cpara, rpara] < min) min = T2[cpara, rpara];
}
}
这种简单处理好像多核也是比单核花费时间吧
fyjin99 2010-06-02
  • 打赏
  • 举报
回复
现在是热点能找到但是优化不了啊
兔子-顾问 2010-06-02
  • 打赏
  • 举报
回复
搜索:
EQATECProfiler
EQATECTracer
兔子-顾问 2010-06-02
  • 打赏
  • 举报
回复
1.使用EQATEC软件加壳
2.运行夹克后的程序,运行到慢的地方,立刻退吹
3.根据生成的xml查看每个函数的调用次数,执行时间,平均时间。找到消耗时间最多的。尝试优化。

优化没有通用方法,具体问题具体分析。
fyjin99 2010-06-02
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 caozhy 的回复:]
这种代码最适合并行。

[/Quote]
如何并行??
threenewbee 2010-06-02
  • 打赏
  • 举报
回复
[Quote=引用 30 楼 wuyazhe 的回复:]
引用 29 楼 fyjin99 的回复:
for(int rpara=lowr;rpara<=topr;rpara++)
{
for(int cpara=lowc;cpara<=topc;cpara++)
{
if (T2[cpara, rpara] > max) max = T2[cpara, rpara];
if (T2[cpara, rpara] < min) min = T2[……
[/Quote]
补充下,如果内侧循环过小,外侧循环次数过多,最好在外面再包装一层,手工拆分下。否则可能反而性能降低。这些关键你要实际去做。

金旭亮老师有一些入门的文章,都介绍了。
兔子-顾问 2010-06-02
  • 打赏
  • 举报
回复
[Quote=引用 29 楼 fyjin99 的回复:]
for(int rpara=lowr;rpara<=topr;rpara++)
{
for(int cpara=lowc;cpara<=topc;cpara++)
{
if (T2[cpara, rpara] > max) max = T2[cpara, rpara];
if (T2[cpara, rpara] < min) min = T2[cpara, rpara];
……
[/Quote]

这样的代码,如果单cpu,多线程反而会更慢,多核的cpu,只要替换一行即可
System.Threading.Tasks.Parallel.For(lowr,topr,rpara)
{
for (int cpara = lowc; cpara <= topc; cpara++)
{
if (T2[cpara, rpara] > max) max = T2[cpara, rpara];
if (T2[cpara, rpara] < min) min = T2[cpara, rpara];
}
}
fyjin99 2010-06-02
  • 打赏
  • 举报
回复
for(int rpara=lowr;rpara<=topr;rpara++)
{
for(int cpara=lowc;cpara<=topc;cpara++)
{
if (T2[cpara, rpara] > max) max = T2[cpara, rpara];
if (T2[cpara, rpara] < min) min = T2[cpara, rpara];
}
}
这段代码能否通过多线程来加速?
fyjin99 2010-06-02
  • 打赏
  • 举报
回复
[Quote=引用 27 楼 wuxing2006 的回复:]

T2 是什么类型
[/Quote]
T2是byte[,]类型
wuxing2006 2010-06-02
  • 打赏
  • 举报
回复
T2 是什么类型
wuxing2006 2010-06-02
  • 打赏
  • 举报
回复
int tmpValue = T[..,..];
max = Math.Max(tmpValue,max);
min = Math.Min(tmpValue.min);
zhoubupt 2010-06-02
  • 打赏
  • 举报
回复
好多大牛啊,学习
兔子-顾问 2010-06-02
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 fyjin99 的回复:]
引用 21 楼 wuyazhe 的回复:

如果要经常这样做。你不如创建索引,或是考虑更换个数据结构,每次添加时候记录下最大最小,以后添加时候只要对比最大最小就知道是否添加的比最大的大,比最小的小。可以减少循环次数。如果经常这样嵌套循环肯定不行的。

这个是对T2的局部数据进行窗口操作,每次添加时候记录下最大最小肯定是不行的。
[/Quote]

既然没可能优化就不优化,找别的可优化的地方,实际情况给领导反映。
醒子宇 2010-06-02
  • 打赏
  • 举报
回复
小弟还处于写代码阶段 学习
fyjin99 2010-06-02
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 wuyazhe 的回复:]

如果要经常这样做。你不如创建索引,或是考虑更换个数据结构,每次添加时候记录下最大最小,以后添加时候只要对比最大最小就知道是否添加的比最大的大,比最小的小。可以减少循环次数。如果经常这样嵌套循环肯定不行的。
[/Quote]
这个是对T2的局部数据进行窗口操作,每次添加时候记录下最大最小肯定是不行的。
兔子-顾问 2010-06-02
  • 打赏
  • 举报
回复
如果要经常这样做。你不如创建索引,或是考虑更换个数据结构,每次添加时候记录下最大最小,以后添加时候只要对比最大最小就知道是否添加的比最大的大,比最小的小。可以减少循环次数。如果经常这样嵌套循环肯定不行的。
fyjin99 2010-06-02
  • 打赏
  • 举报
回复
for(int rpara=lowr;rpara<=topr;rpara++)
{
for(int cpara=lowc;cpara<=topc;cpara++)
{
if (T2[cpara, rpara] > max) max = T2[cpara, rpara];
if (T2[cpara, rpara] < min) min = T2[cpara, rpara];
}
}
这段代码我通过两个线程来执行,一个计算max,一个计算min在双核的cpu上是不是理论上能提高近50%?
捷哥1999 2010-06-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 caozhy 的回复:]

使用一个性能分析工具(VS2010自带,2005需要另外安装),看看程序的热点在哪里。

所谓热点,就是调用次数最多,耗时比例最高的函数。
然后对热点进行优化。
[/Quote]
可以参考,这个思路对的!
加载更多回复(14)
[14本经典Android开发教程]-3-Android SDK 中文开发文档 什么是 Android? Android 是一个专门针对移动设备的软件集,它包括一个操作系统,中间件和一些重要的应用程序。Beta版的 Android SDK 提供了在Android 平台上使用JaVa语言进行Android应用开发必须的工具和API接口。 特性 · 应用程序框架 支持组件的重用与替换 · Dalvik 虚拟机 专为移动设备优化 · 集成的浏览器 基于开源的WebKit 引擎 · 优化的图形库 包括定制的2D图形库,3D图形库基于OpenGL ES 1.0 (硬件加速可选) · SQLite 用作结构化的数据存储 · 多媒体支持 包括常见的音频、视频和静态图像格式 (如 MPEG4, H.264, MP3, AAC, AMR, JPG, PNG, GIF) · GSM 电话技术 (依赖于硬件) · 蓝牙Bluetooth, EDGE, 3G, 和 WiFi (依赖于硬件) · 照相机,GPS,指南针,和加速度计(accelerometer) (依赖于硬件) · 丰富的开发环境 包括设备模拟器,调试工具,内存及性能分析图表,和Eclipse集成开发环境插件 Android 架构 下图显示的是Android操作系统的主要组件。每一部分将会在下面具体描述。 已上传2本: [14本经典Android开发教程]-1-Android开发从入门到精通http://download.csdn.net/detail/cleopard/8355245 [14本经典Android开发教程]-2-Android开发手册—API函数详解 http://download.csdn.net/detail/cleopard/8374487 剩余11本稍后上传!@或直接从这里寻找@ http://download.csdn.net/user/cleopard/album @更多@ http://cleopard.download.csdn.net/ 福利 http://xuemeilaile.com 17份软件测试文档 http://download.csdn.net/album/detail/1425 13份WPF经典开发教程 http://download.csdn.net/album/detail/1115 C#资料合辑二[C#桌面编程入门篇] http://download.csdn.net/album/detail/957 C#资料合辑一[C#入门篇] http://download.csdn.net/album/detail/669 [Csharp高级编程(第6版)](共8压缩卷) http://download.csdn.net/album/detail/667 10个[精品资源]Java学习资料合辑[一] http://download.csdn.net/album/detail/663 10个C#Socket编程代码示例 http://download.csdn.net/album/detail/631 6份GDI+程序设计资源整合[全零分] http://download.csdn.net/album/detail/625 2014年移动游戏行业数据分析 http://download.csdn.net/detail/cleopard/8340331 一文读懂2014年全球互联网广告新生态 http://download.csdn.net/detail/cleopard/8340303

110,567

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧