学习VB差不多一个月了,最近想试试做平时自己常用的个小软件,因为上次发贴得到前辈们的提点,遇到难点先看书再找找资料,不要一遇到问题就上来问,这样很难学到本事,这提点真的有用,以前不明的地方自己慢慢可以找到解决方案,而且是印象比较深。但这次花了好几天时间真的没办法解决,其它的问题基本自己解决了(当然是指我的水平内),请大家帮帮忙!!我想做的那个软件,在做前已定好架构,分开运行起来是可以,但就是有些地方太慢了软件是要计算一种物质的各种值,数据量比较大,但运行慢不是慢在运算过程,反而是慢在字符的连接过程,下面是例:
以前我是用一个变量 a来奖一系列(过百万条)的数值,这样太慢,最后换了用百万个动态数组来把一个值装起来,算解决了
速度的问题,但问问题是出自己我的数组a()string,是在循环中产生,每次循环有十个不同的值,分别是h1,h2,h3,h4,h5.....h10我在循环里用 a(ser)=h1 & h2 & h3 & ........h10然后再 量.Text = Join(a) 把数据导出但运行太慢了,我原来以为是循环(里面还有判断)太多使每次的数组赋值太慢,但我测试过,把循环里的判断改为一个实数值,这样速度也是一样,最后才查出原来是a(ser)=h1 & h2 & h3 & ........h10把整个过程速度拉下来,我试了把a()改为数值型,h1 + h2 + h3 ....也改为数值,相加运算,这样一个300多万个数组产生出来也不到十秒,可以用了连接符 & 连接,需要差不多10分钟才能完成连接, 量.Text = Join(a) 分解也只是几秒的事,在网上找还是找不到怎样替换 用 & 的办法,因为我只是初学,数据库,API这些都不会,希大家指教一下,最好是有注解释的,不要用太深的函数看不懂
(因为我的原代码中有些数据不能放上网,所以只能做个例,如我说得不清我再补充说明)
还有点,数据太大不能在TXT里显示,有没有其它显示出来的控件,我见有些软件,在显示框中达到500项就会加一个新页,所以多大数据都可以显示的。
以前我是用一个变量 a来奖一系列(过百万条)的数值,这样太慢,最后换了用百万个动态数组来把一个值装起来,算解决了
速度的问题,但问问题是出自己我的数组a()string,是在循环中产生,每次循环有十个不同的值,分别是h1,h2,h3,h4,h5.....h10我在循环里用 a(ser)=h1 & h2 & h3 & ........h10然后再 量.Text = Join(a) 把数据导出但运行太慢了,我原来以为是循环(里面还有判断)太多使每次的数组赋值太慢,但我测试过,把循环里的判断改为一个实数值,这样速度也是一样,最后才查出原来是a(ser)=h1 & h2 & h3 & ........h10把整个过程速度拉下来,我试了把a()改为数值型,h1 + h2 + h3 ....也改为数值,相加运算,这样一个300多万个数组产生出来也不到十秒,可以用了连接符 & 连接,需要差不多10分钟才能完成连接, 量.Text = Join(a) 分解也只是几秒的事,在网上找还是找不到怎样替换 用 & 的办法,因为我只是初学,数据库,API这些都不会,希大家指教一下,最好是有注解释的,不要用太深的函数看不懂
(因为我的原代码中有些数据不能放上网,所以只能做个例,如我说得不清我再补充说明)
还有点,数据太大不能在TXT里显示,有没有其它显示出来的控件,我见有些软件,在显示框中达到500项就会加一个新页,所以多大数据都可以显示的。
if tx=1 h1=1.233 then
end if
if tx=2 h1=4.658then
end if
if tx=3 h1=0.5537then
end if for tx1=1 to 4
if tx1=1 h2=1.233 then
end if
if tx1=2 h2=4.658then
end if
if tx1=3 h2=0.5537then
end if for tx2=1 to 6
if tx2=1 h3=1.233 then
end if
if tx2=2 h3=4.658then
end if
if tx2=3 h3=0.5537then
end if
for ....
.... 一共有10个这样的需判断的循环,这里略去
for。这是第十个
a(ser)=h1 & h2 & h3........& h10就是这里太慢,如果不是&连接,换成运算,例如加减这样速度没问题,就是&连接太慢,可能是次数太多吧,我试过省去循环里的判断直接给H条个一个实数值,再连接,也是一样慢,所以我觉得不是是&出问题,不知能不能解决next ..
next ..
next ..........
if tx1=1 h2=1.233 then
end if
if tx1=2 h2=4.658then
end if
if tx1=3 h2=0.5537then
end if可以换成choose,但速度并没有得到提高,比如:
h2=Choose(tx1, 1.233, 4.658, 0.5537)
速度慢的原因是循环过多,从代码上看,你的逻辑思路有问题,需要优化一下。
先试试这个StringBuilder,看能不能提高效率?
+也可作字符串连接符,你可以试试,速度一样不会快,因为你在处理字符串。
dim s as string
s=s+"a"
s=s+"bb"
s=s+"1234"
改为往定长字符串数组赋值
dim s(1 to 3) as string*4
s(1)="a"
s(2)="bb"
s(3)="1234"
谢谢两前辈是的呀,就是字符型处理实在太慢了,楼上大哥说的改为定长字符的方法也试过了,过程时间差不了多少,考滤到后面会用到 Join,所以长用string,本以为能过这一步下面的就单纯的数学运算了,不会太慢,可惜一晚通宵尝试一下下面的运算,跟本没法跑动,排序排了一个小时还没排好,我是用请教一下前辈们学习数据库有什么好书或网上资料参考一下。最终想得到计算结果:玉米 各种不同的含量值 分为含量 和 含量的量化两个值, 得到值后一起排序,量化值为一个标准值,比如导入花生的量化值,对比一下玉米的量化值,把相同或指定范围比例内的玉米含量值找出来进行对比分分析
' Dim ssp#, jt&, js&, xxp$
'For jt = 1 To 4342256
'For js = jt + 1 To 4342257
'If pdy(jt) > pdy(js) Then '此排序方法是从数组第2个对比第一个,对比完全部后完成内
'ssp = pdy(jt): pdy(jt) = pdy(js): pdy(js) = ssp '循环的一次得出最小的一个数,那就是外循环的第一次就是最小,最后一次就是最大
'xxp = rex(jt): rex(jt) = rex(js): rex(js) = xxp
'End If
'Next js
'Next jt
小于10000用冒泡
小于100000用qsort
小于1000000用数据库(B+树索引)
大于1000000没遇到过。用哈希、归并?
数据库书,参考这个
http://topic.csdn.net/t/20030127/16/1395771.html
英文不好找工具去翻译。
再不行将左上角的例程下来了看总会吧。其实只要学会怎么调用 StringBuilder 这个类就可以了。