by konisi » 2006年3月28日(火) 12:12
暇つぶしに1万回継承させるとどのくらい違うのか試してみました。
[ここをクリックすると内容が表示されます] [ここをクリックすると非表示にします]test.sbpを出力するソース
コード: 全て選択
#console
Dim I As Long
Dim A$ As String
Open "test.sbp" For Output As #1
Print #1,"Class Test1"
Print #1,"End Class"
For I=1 To 10000
A$="Class Test"+Str$(I+1)
Print #1,A$
A$=" Inherits Test"+Str$(I)
Print #1,A$
Print #1,"End Class"
Next I
Close #1
End
test.abp
コード: 全て選択
#N88BASIC
#include "test.sbp"
Dim obj1 As *Test1
Dim obj2 As *Test10001
Dim t1 As DWord
Dim t2 As DWord
t1=GetTickCount()
obj1=New Test1
t2=GetTickCount()
delete obj1
print t2-t1
t1=GetTickCount()
obj2=New Test10001
t2=GetTickCount()
delete obj2
print t2-t1
分かったこと
かかる時間は直接呼び出す方が0と表示され、1万回継承する方は31とい表示された。(つまり、0.031秒程度かかったと。)(32bitマシンで動作した。)
コンパイルにとてつもなく時間がかかる(自宅の環境で30分ほどかかった。)
実行ファイルのサイズが44Kb(100件時)→704Kb(10000件時)となった。滅茶苦茶肥大化してる。
結論
継承をしまくるのはいろんな意味で「重く」なるため、やめた方がいいことが分かった
提案 To 山本さん
コンパイルに多少多めに時間がかかるようになると思いますが、クラスを多重継承させた場合でも最適の実行コードが吐かれるように改良して欲しいです。
難しい注文ですが。
暇つぶしに1万回継承させるとどのくらい違うのか試してみました。
[hide]test.sbpを出力するソース[code]#console
Dim I As Long
Dim A$ As String
Open "test.sbp" For Output As #1
Print #1,"Class Test1"
Print #1,"End Class"
For I=1 To 10000
A$="Class Test"+Str$(I+1)
Print #1,A$
A$=" Inherits Test"+Str$(I)
Print #1,A$
Print #1,"End Class"
Next I
Close #1
End
[/code]
test.abp[code]#N88BASIC
#include "test.sbp"
Dim obj1 As *Test1
Dim obj2 As *Test10001
Dim t1 As DWord
Dim t2 As DWord
t1=GetTickCount()
obj1=New Test1
t2=GetTickCount()
delete obj1
print t2-t1
t1=GetTickCount()
obj2=New Test10001
t2=GetTickCount()
delete obj2
print t2-t1
[/code][/hide]
分かったこと
かかる時間は直接呼び出す方が0と表示され、1万回継承する方は31とい表示された。(つまり、0.031秒程度かかったと。)(32bitマシンで動作した。)
コンパイルにとてつもなく時間がかかる(自宅の環境で30分ほどかかった。)
実行ファイルのサイズが44Kb(100件時)→704Kb(10000件時)となった。滅茶苦茶肥大化してる。
結論
継承をしまくるのはいろんな意味で「重く」なるため、やめた方がいいことが分かった
提案 To 山本さん
コンパイルに多少多めに時間がかかるようになると思いますが、クラスを多重継承させた場合でも最適の実行コードが吐かれるように改良して欲しいです。
難しい注文ですが。