性能

本文探讨了数据库查询效率问题,特别是在使用binary字段时select*的耗时情况,并通过对比不同循环方式及数据类型(托管与本机数组)的性能差异,展示了代码优化的重要性。

34k条数据 用select * 查询,用了2 分30秒,其中用binary字段,数据大小是几k

select id 则几乎不耗时,select top 100 *也几乎不耗时。

所以要小心使用select *,特别是有binary的时候

用for语句做1G次的加法,c#,c++速度差不多。

 

int s=100000000;
     DateTime t1=System::DateTime::Now;
     cli::array<int,1> ^a=gcnew cli::array<int,1>(s);
     for(int i=0;i<s;i++)
     {
      a[i]=i;
     }
     DateTime t2=System::DateTime::Now ;
     TimeSpan d=t2-t1;
     MessageBox::Show(d.TotalMilliseconds.ToString()+"ms");

上面的代码我的电脑运行,耗时470ms左右.用的是托管数组

改成while循环,耗时435ms左右。看来while循环,比for循环稍微快点

后面用本机数组来实现。数组不能放在栈中,因为栈的默认大小是1M

所以不能这么写

const int s=100000000;
     int a[s];

应该写成

const int s=100000000;
     int *a=new int[s];

释放delete []a;

本机数组的结果是250ms,比托管大概快1倍。

 

 用opencv读取bmp,灰度化,二值化,求连通区,重复1000次,耗时2500ms左右。

用自己.net 写的代码做,没有做过优化,就一个灰度化100次,就是1600ms。

看来还是得用opencv来做项目。代码优化的工作是非常巨的。

 

 

今天写了条非常耗时的代码

for (int j = 0; j < vectorLength; j++)
                {
                    trainData[i, j] = this.richTextBox1.Lines[i][j];
                }

richbox中是一个5200行,每行1296个字节的内容。

trainData是float类型的。这个操作非常耗时。内循环(1296次)用了426s。

首先想到的是richtextbox的范围太耗时。改成如下:

temps = this.richTextBox1.Lines[i];
                for (int j = 0; j < vectorLength; j++)
                {
                    trainData[i, j] = temps[j];
                }

结果耗时只有0.3s。但是完成外循环(5200次),一共还是花了1776s。

网上一时没找到好的方法。先这样用这吧。好在这个不是经常操作。

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值