ab.com コミュニティ https://www.activebasic.com/forum/ |
|
V4.20&4.21で Print#とInput# が低速不安定に https://www.activebasic.com/forum/viewtopic.php?t=742 |
ページ 1 / 1 |
作成者: | るっとパパ [ 2006年2月16日(木) 20:14 ] |
記事の件名: | V4.20&4.21で Print#とInput# が低速不安定に |
<V4.20&4.21で Print#とInput# が低速不安定に> V4.20時の投稿の続編です。V4.21でも状況が変わっていません。行数が多くてすみません。 文字列操作(Right$,Left$,Mid$)とファイル入出力(Print#,Input#)を繰返すテスト用コードと その結果を報告します。下記コードをコンパイルしたexeファイルでのテスト結果です。 Print#とInput#が非常に低速かつ不安定です。(文字列操作に関しては有意差はありません) 繰返し回数を増やしていくとV4.20とV4.21は必ず死にます。 (「~のメモリを参照しました。メモリが"read"になることはできませんでした。」) 死ぬタイミングは一定していません。 V4.13では正常(10万回でも元気)なのに、V4.20&4.21では低速なだけでなく、繰返し回数を増して いくと必ず死にます(500回程度でも死ぬことがあります)。 仕様というよりどこかに不具合があるように思われるのですが。 AB発展のために仕様としてN88BASIC系のコマンドが低速にならざるを得ないのでしょうか。 それにしても死んでしまうのは困ります。 そんなに繰返して実行することがあるの?という疑問はさておき、是非ご検討お願いします。 パソコンA(Pentium4 3GHz Windows2000) ! !500回 500回 500回 !1000回 1000回 1000回 !2000回 2000回 2000回 ! ! !V4.13 V4.20 V4.21 !V4.13 V4.20 V4.21 !V4.13 V4.20 V4.21 ! ! ! ! ! ! !Right$ For~Next !0.11 秒 0.109秒 0.094秒!0.219秒 0.219秒 0.203秒!0.422秒 0.422秒 0.438秒! !Right$ Do~Loop !0.109秒 0.109秒 0.109秒!0.203秒 0.203秒 0.219秒!0.438秒 0.438秒 0.421秒! !Right$ While~Wend !0.11 秒 0.094秒 0.11 秒!0.219秒 0.219秒 0.219秒!0.422秒 0.422秒 0.438秒! ! ! ! ! ! !Left$ For~Next !0.093秒 0.094秒 0.109秒!0.218秒 0.219秒 0.219秒!0.437秒 0.437秒 0.422秒! !Left$ Do~Loop !0.11 秒 0.109秒 0.109秒!0.219秒 0.219秒 0.203秒!0.422秒 0.422秒 0.422秒! !Left$ While~Wend !0.109秒 0.109秒 0.11 秒!0.203秒 0.203秒 0.204秒!0.437秒 0.438秒 0.438秒! ! ! ! ! ! !Mid$ For~Next !0.109秒 0.11 秒 0.109秒!0.219秒 0.218秒 0.218秒!0.422秒 0.437秒 0.437秒! !Mid$ Do~Loop !0.11 秒 0.109秒 0.11 秒!0.219秒 0.219秒 0.219秒!0.438秒 0.438秒 0.438秒! !Mid$ While~Wend !0.109秒 0.109秒 0.109秒!0.218秒 0.219秒 0.219秒!0.422秒 0.421秒 0.437秒! ! ! ! ! ! !Print# 数値 For~ !0.125秒 0.157秒 0.172秒!0.235秒 0.422秒 0.422秒!0.468秒 1.204秒 1.203秒! !Print# 数値 Do~ !0.11 秒 0.265秒 0.25 秒!0.219秒 0.781秒 0.797秒!0.454秒 2.672秒 2.688秒! !Print# 数値 While~!0.125秒 0.344秒 0.359秒!0.234秒 1.156秒 1.156秒!0.468秒 4.172秒 4.172秒! ! ! ! ! ! !Print# 文字 For~ !0.109秒 0.344秒 0.328秒!0.219秒 1.141秒 1.125秒!0.422秒 4.125秒 4.109秒! !Print# 文字 Do~ !0.109秒 0.406秒 0.407秒!0.218秒 1.391秒 1.391秒!0.438秒 5.141秒 5.156秒! !Print# 文字 While~!0.11 秒 0.469秒 0.469秒!0.219秒 1.641秒 1.656秒!0.422秒 (死ぬ) (死ぬ)! ! ! ! ! ! !Input# 数値 For~ !0.125秒 1.015秒 1.016秒!0.25 秒 3.797秒 3.797秒!0.515秒 ! !Input# 数値 Do~ !0.14 秒 1 秒 1.015秒!0.266秒 3.797秒 3.828秒!0.516秒 ! !Input# 数値 While~!0.125秒 1.016秒 1.016秒!0.25 秒 (死ぬ) 3.797秒!0.515秒 ! ! ! ! ! ! !Input# 文字 For~ !0.125秒 0.937秒 0.953秒!0.25 秒 3.531秒!0.5 秒 ! !Input# 文字 Do~ !0.125秒 1.078秒 1.109秒!0.25 秒 4.031秒!0.5 秒 ! !Input# 文字 While~!0.125秒 1.203秒 1.203秒!0.25 秒 4.531秒!0.5 秒 ! パソコンA(Pentium4 2.53Hz WindowsXP) ! !500回 500回 500回 !1000回 1000回 1000回 !2000回 2000回 2000回 ! ! !V4.13 V4.20 V4.21 !V4.13 V4.20 V4.21 !V4.13 V4.20 V4.21 ! ! ! ! ! ! !Right$ For~Next !0.125秒 0.125秒 0.125秒!0.25 秒 0.25 秒 0.25 秒!0.5 秒 0.5 秒 0.5 秒! !Right$ Do~Loop !0.125秒 0.125秒 0.125秒!0.25 秒 0.25 秒 0.25 秒!0.515秒 0.516秒 0.516秒! !Right$ While~Wend !0.125秒 0.125秒 0.125秒!0.25 秒 0.265秒 0.25 秒!0.5 秒 0.516秒 0.516秒! ! ! ! ! ! !Left$ For~Next !0.125秒 0.125秒 0.141秒!0.235秒 0.25 秒 0.25 秒!0.516秒 0.5 秒 0.5 秒! !Left$ Do~Loop !0.125秒 0.125秒 0.125秒!0.25 秒 0.25 秒 0.25 秒!0.5 秒 0.531秒 0.515秒! !Left$ While~Wend !0.125秒 0.125秒 0.125秒!0.25 秒 0.266秒 0.25 秒!0.516秒 0.515秒 0.516秒! ! ! ! ! ! !Mid$ For~Next !0.125秒 0.125秒 0.125秒!0.25 秒 0.25 秒 0.25 秒!0.515秒 0.516秒 0.515秒! !Mid$ Do~Loop !0.141秒 0.141秒 0.141秒!0.25 秒 0.266秒 0.266秒!0.5 秒 0.531秒 0.516秒! !Mid$ While~Wend !0.125秒 0.125秒 0.125秒!0.266秒 0.265秒 0.25 秒!0.516秒 0.516秒 0.516秒! ! ! ! ! ! !Print# 数値 For~ !0.14 秒 0.218秒 0.218秒!0.297秒 0.547秒 0.562秒!0.594秒 1.609秒 1.578秒! !Print# 数値 Do~ !0.14 秒 0.344秒 0.344秒!0.297秒 1.047秒 1.063秒!0.594秒 3.609秒 3.593秒! !Print# 数値 While~ !0.141秒 0.469秒 0.453秒!0.297秒 1.547秒 1.547秒!0.593秒 5.593秒 5.609秒! ! ! ! ! ! !Print# 文字 For~ !0.141秒 0.437秒 0.453秒!0.266秒 1.532秒 1.5 秒!0.547秒 5.5 秒 5.5 秒! !Print# 文字 Do~ !0.141秒 0.532秒 0.547秒!0.281秒 1.875秒 1.875秒!0.562秒 6.891秒 6.907秒! !Print# 文字 While~ !0.14 秒 0.625秒 0.625秒!0.266秒 2.235秒 2.219秒!0.547秒 8.328秒 8.312秒! ! ! ! ! ! !Input# 数値 For~ !0.156秒 1.359秒 1.344秒!0.328秒 5.094秒 5.109秒!0.656秒 19.657秒 19.734秒! !Input# 数値 Do~ !0.156秒 1.36 秒 1.36 秒!0.328秒 5.125秒 5.093秒!0.657秒 19.657秒 20.015秒! !Input# 数値 While~ !0.157秒 1.36 秒 1.36 秒!0.312秒 5.125秒 5.125秒!0.672秒 19.688秒 19.922秒! ! ! ! ! ! !Input# 文字 For~ !0.156秒 1.265秒 1.25 秒!0.313秒 4.828秒 4.766秒!0.64 秒 18.297秒 19.469秒! !Input# 文字 Do~ !0.156秒 1.437秒 1.437秒!0.328秒 5.469秒 5.5 秒!0.625秒 21.015秒 21.64 秒! !Input# 文字 While~ !0.156秒 1.625秒 1.61 秒!0.312秒 6.172秒 6.156秒!0.625秒 23.765秒 25.906秒! 冒頭のバージョン行は不要行をコメント行にしてください。 '↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ #prompt Dim AV As String:AV="4.13" 'ActiveBasicバージョン 'Dim AV As String:AV="4.20" 'ActiveBasicバージョン 'Dim AV As String:AV="4.21" 'ActiveBasicバージョン Dim T1 As Long '開始時刻 Dim NN As Long :NN=10000 '繰返し回数 Dim C1 As Long,C2 As Long,C3 As Long '表示桁数 C1=0:C2=40:C3=50 Dim TL As String 'タイトル Dim LN As Long :LN=1 '表示行数 Dim I As Long,J As Long '汎用 J=1234567890 Dim II As String,JJ As String '汎用 JJ="1234567890" '---------------------------------------------------------- Open "Report.txt" For Append As #2 TL="---ActiveBasic Ver"+AV+" によるテスト---"+Right$(Date$(),8)+" "+Time$() Print TL :Print #2,String$(60,"=") :Print #2,TL Input "繰返し回数(まずは 500で。1000位からV4.2xで死ぬ確率が増す):",NN '==========================================================01 TL="Right$ For~Next "+Str$(NN)+"回 " LN=LN+2 :Locate C1,LN :Print TL :T1=GetTickCount() For I=1 To NN II=Right$(JJ,5):Locate C2,LN:Print I Next I II=Str$((GetTickCount()-T1)/1000)+" 秒" Locate C3,LN :Print II :Print #2,"" :Print #2,TL+II '----------------------------------------------------------02 TL="Right$ Do~Loop "+Str$(NN)+"回 " LN=LN+1 :Locate C1,LN :I=0 :Print TL :T1=GetTickCount() Do II=Right$(JJ,5):I=I+1:Locate C2,LN:Print I Loop Until I>=NN II=Str$((GetTickCount()-T1)/1000)+" 秒" Locate C3,LN :Print II :Print #2,TL+II '----------------------------------------------------------03 TL="Right$ While~Wend "+Str$(NN)+"回 " LN=LN+1 :Locate C1,LN :I=0 :Print TL :T1=GetTickCount() While I<NN II=Right$(JJ,5):I=I+1:Locate C2,LN:Print I Wend II=Str$((GetTickCount()-T1)/1000)+" 秒" Locate C3,LN :Print II :Print #2,TL+II '==========================================================04 TL="Left$ For~Next "+Str$(NN)+"回 " LN=LN+2 :Locate C1,LN :Print TL :T1=GetTickCount() For I=1 To NN II=Left$(JJ,5):Locate C2,LN:Print I Next I II=Str$((GetTickCount()-T1)/1000)+" 秒" Locate C3,LN :Print II :Print #2,"" :Print #2,TL+II '----------------------------------------------------------05 TL="Left$ Do~Loop "+Str$(NN)+"回 " LN=LN+1 :Locate C1,LN :I=0 :Print TL :T1=GetTickCount() Do II=Left$(JJ,5):I=I+1:Locate C2,LN:Print I Loop Until I>=NN II=Str$((GetTickCount()-T1)/1000)+" 秒" Locate C3,LN :Print II :Print #2,TL+II '----------------------------------------------------------06 TL="Left$ While~Wend "+Str$(NN)+"回 " LN=LN+1 :Locate C1,LN :I=0 :Print TL :T1=GetTickCount() While I<NN II=Left$(JJ,5):I=I+1:Locate C2,LN:Print I Wend II=Str$((GetTickCount()-T1)/1000)+" 秒" Locate C3,LN :Print II :Print #2,TL+II '==========================================================07 TL="Mid$ For~Next "+Str$(NN)+"回 " LN=LN+2 :Locate C1,LN :Print TL :T1=GetTickCount() For I=1 To NN II=Mid$(JJ,3,5):Locate C2,LN:Print I Next I II=Str$((GetTickCount()-T1)/1000)+" 秒" Locate C3,LN :Print II :Print #2,"" :Print #2,TL+II '----------------------------------------------------------08 TL="Mid$ Do~Loop "+Str$(NN)+"回 " LN=LN+1 :Locate C1,LN :I=0 :Print TL :T1=GetTickCount() Do II=Mid$(JJ,3,5):I=I+1:Locate C2,LN:Print I Loop Until I>=NN II=Str$((GetTickCount()-T1)/1000)+" 秒" Locate C3,LN :Print II :Print #2,TL+II '----------------------------------------------------------09 TL="Mid$ While~Wend "+Str$(NN)+"回 " LN=LN+1 :Locate C1,LN :I=0 :Print TL :T1=GetTickCount() While I<NN II=Mid$(JJ,3,5):I=I+1:Locate C2,LN:Print I Wend II=Str$((GetTickCount()-T1)/1000)+" 秒" Locate C3,LN :Print II :Print #2,TL+II '==========================================================10 TL="Print# 数値 For~Next "+Str$(NN)+"回 " LN=LN+2 :Locate C1,LN :Print TL Open "Test.txt" For Output As #1 T1=GetTickCount() For I=1 To NN Print #1,J:Locate C2,LN:Print I Next I II=Str$((GetTickCount()-T1)/1000)+" 秒" Locate C3,LN :Print II :Print #2,"":Print #2,TL+II:Close #1 '----------------------------------------------------------11 TL="Print# 数値 Do~Loop "+Str$(NN)+"回 " LN=LN+1 :Locate C1,LN :I=0 :Print TL Open "Test.txt" For Output As #1 T1=GetTickCount() Do Print #1,J:I=I+1:Locate C2,LN:Print I Loop Until I>=NN II=Str$((GetTickCount()-T1)/1000)+" 秒" Locate C3,LN :Print II :Print #2,TL+II :Close #1 '----------------------------------------------------------12 TL="Print# 数値 While~Wend "+Str$(NN)+"回 " LN=LN+1 :Locate C1,LN :I=0 :Print TL Open "Test.txt" For Output As #1 T1=GetTickCount() While I<NN Print #1,J:I=I+1:Locate C2,LN:Print I Wend II=Str$((GetTickCount()-T1)/1000)+" 秒" Locate C3,LN :Print II :Print #2,TL+II :Close #1 '==========================================================13 TL="Print# 文字 For~Next "+Str$(NN)+"回 " LN=LN+2 :Locate C1,LN :Print TL Open "Test.txt" For Output As #1 T1=GetTickCount() For I=1 To NN Print #1,JJ:Locate C2,LN:Print I Next I II=Str$((GetTickCount()-T1)/1000)+" 秒" Locate C3,LN :Print II :Print #2,"":Print #2,TL+II:Close #1 '----------------------------------------------------------14 TL="Print# 文字 Do~Loop "+Str$(NN)+"回 " LN=LN+1 :Locate C1,LN :I=0 :Print TL Open "Test.txt" For Output As #1 T1=GetTickCount() Do Print #1,JJ:I=I+1:Locate C2,LN:Print I Loop Until I>=NN II=Str$((GetTickCount()-T1)/1000)+" 秒" Locate C3,LN :Print II :Print #2,TL+II :Close #1 '----------------------------------------------------------15 TL="Print# 文字 While~Wend "+Str$(NN)+"回 " LN=LN+1 :Locate C1,LN :I=0 :Print TL Open "Test.txt" For Output As #1 T1=GetTickCount() While I<NN Print #1,JJ:I=I+1:Locate C2,LN:Print I Wend II=Str$((GetTickCount()-T1)/1000)+" 秒" Locate C3,LN :Print II :Print #2,TL+II :Close #1 '==========================================================16 TL="Input# 数値 For~Next "+Str$(NN)+"回 " LN=LN+2 :Locate C1,LN :Print TL Open "Test.txt" For Input As #1 T1=GetTickCount() For I=1 To NN Input #1,J:Locate C2,LN:Print I Next I II=Str$((GetTickCount()-T1)/1000)+" 秒" Locate C3,LN :Print II :Print #2,"":Print #2,TL+II:Close #1 '----------------------------------------------------------17 TL="Input# 数値 Do~Loop "+Str$(NN)+"回 " LN=LN+1 :Locate C1,LN :I=0 :Print TL Open "Test.txt" For Input As #1 T1=GetTickCount() Do Input #1,J:I=I+1:Locate C2,LN:Print I Loop Until I>=NN II=Str$((GetTickCount()-T1)/1000)+" 秒" Locate C3,LN :Print II :Print #2,TL+II :Close #1 '----------------------------------------------------------18 TL="Input# 数値 While~Wend "+Str$(NN)+"回 " LN=LN+1 :Locate C1,LN :I=0 :Print TL Open "Test.txt" For Input As #1 T1=GetTickCount() While I<NN Input #1,J:I=I+1:Locate C2,LN:Print I Wend II=Str$((GetTickCount()-T1)/1000)+" 秒" Locate C3,LN :Print II :Print #2,TL+II :Close #1 '==========================================================19 TL="Input# 文字 For~Next "+Str$(NN)+"回 " LN=LN+2 :Locate C1,LN :Print TL Open "Test.txt" For Input As #1 T1=GetTickCount() For I=1 To NN Input #1,JJ:Locate C2,LN:Print I Next I II=Str$((GetTickCount()-T1)/1000)+" 秒" Locate C3,LN :Print II :Print #2,"":Print #2,TL+II:Close #1 '----------------------------------------------------------20 TL="Input# 文字 Do~Loop "+Str$(NN)+"回 " LN=LN+1 :Locate C1,LN :I=0 :Print TL Open "Test.txt" For Input As #1 T1=GetTickCount() Do Input #1,JJ:I=I+1:Locate C2,LN:Print I Loop Until I>=NN II=Str$((GetTickCount()-T1)/1000)+" 秒" Locate C3,LN :Print II :Print #2,TL+II :Close #1 '----------------------------------------------------------21 TL="Input# 文字 While~Wend "+Str$(NN)+"回 " LN=LN+1 :Locate C1,LN :I=0 :Print TL Open "Test.txt" For Input As #1 T1=GetTickCount() While I<NN Input #1,JJ:I=I+1:Locate C2,LN:Print I Wend II=Str$((GetTickCount()-T1)/1000)+" 秒" Locate C3,LN :Print II :Print #2,TL+II :Close #1 '========================================================== TL="テストを終了しました。" Locate C1,LN+2:Print TL :Print #2,"":Print #2,TL:Close #2 '↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ |
作成者: | たかせ [ 2006年2月19日(日) 17:21 ] |
記事の件名: | V4.20&4.21で Print#とInput# が低速不安定に |
たかせです。 不安定にはいたっていませんが。 実行速度がおそくなったことは確かです。 V4.13で1秒で実行できたものがV4.20,V4.21は15秒かかる場合もありました。 |
作成者: | faro [ 2006年3月07日(火) 02:14 ] |
記事の件名: | |
私もあまりの速度の違いにびっくりしています。(環境:WinXP/Sp2) Ver4.13.00と比べるとそれ以降のVersionでは圧倒的に遅いです。 OPEN文を入れ子(複数個)に設定すると遅いような気がします。 以下に例を示します。 何かわかる方コメントお願いします。 コード: #console dim s$ as string dim i as dword,j as dword dim t0$ as string dim t$ as string t0$=Time$() print t0$ open "test.txt" for output as #1 open "test2.txt" for output as #2 for i=1 to 10 for j=1 to 1000 print i,j print #1,i;i+1;i+2 print #2,j;j+1;j+2 Next Next close #1 close #2 t$=Time$() temp$(1)=Mid$(t$,4,2) temp$(2)=Mid$(t0$,4,2) temp$(3)=Mid$(t$,7,2) temp$(4)=Mid$(t0$,7,2) print "所要時間",(Val(temp$(1))*60-Val(temp$(2))*60)+(Val(temp$(3))-Val(temp$(4))) end |
作成者: | faro [ 2006年3月07日(火) 02:23 ] |
記事の件名: | |
前記code内において dim temp$(10) as string が抜けていました。 すみません。 |
ページ 1 / 1 | 全ての表示時間は UTC+09:00 です |
Powered by phpBB® Forum Software © phpBB Limited https://www.phpbb.com/ |