<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
'↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
V4.20&4.21で Print#とInput# が低速不安定に
-
- 記事: 217
- 登録日時: 2006年2月05日(日) 17:10
- お住まい: 東京都
V4.20&4.21で Print#とInput# が低速不安定に
たかせです。
不安定にはいたっていませんが。
実行速度がおそくなったことは確かです。
V4.13で1秒で実行できたものがV4.20,V4.21は15秒かかる場合もありました。
不安定にはいたっていませんが。
実行速度がおそくなったことは確かです。
V4.13で1秒で実行できたものがV4.20,V4.21は15秒かかる場合もありました。
私もあまりの速度の違いにびっくりしています。(環境:WinXP/Sp2)
Ver4.13.00と比べるとそれ以降のVersionでは圧倒的に遅いです。
OPEN文を入れ子(複数個)に設定すると遅いような気がします。
以下に例を示します。
何かわかる方コメントお願いします。
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