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。
网上一时没找到好的方法。先这样用这吧。好在这个不是经常操作。
本文探讨了数据库查询效率问题,特别是在使用binary字段时select*的耗时情况,并通过对比不同循环方式及数据类型(托管与本机数组)的性能差异,展示了代码优化的重要性。
1592

被折叠的 条评论
为什么被折叠?



