Hej.
Kan nogen af jer kodehajer i gruppen give mig en fornuftig forklaring på
(og meget gerne en løsning til at afhjælpe), at bitmap-grafikbehandling
i VB6 er næsten 40% langsommere under XP end under Windows 98? Jeg har
søgt højt og lavt på nettet uden at finde nogen forklaring.
Til illustration har jeg lavet følgende meget simple
'starfield'-program, og når jeg kører det under Win98, gennemføres det
på 50 sek., mens det tager 79 sek. under XP (vel at mærke på samme
maskine og under så vidt muligt ensartede testforhold (form1.width=9270,
..height=7080).
Min klude-kode kan uden tvivl optimeres, så den i sig selv bliver
hurtigere, men det forklarer jo ikke afviklingsforskellen, som også gør
sig gældende ved brug af BitBlt og Stretchblt m.v.. Hvis nogen kan give
mig et svar/en evt. løsning, vil jeg være meget taknemmelig.
Hvis nogen har lyst til at prøve koden, er den eneste forudsætning, at
Form1 (autoredraw=true) indeholder en Picture1.picturebox
(visible=false) med en bitmap, f.eks. en af dem, som følger med VB6
under common\graphics\bitmaps\assorted.
På forhånd tak & mange hilsener
Erling Grønlund, Århus
--------------------- Code Quote ---------------------------
Private Type pictype
x As Long
y As Long
z As Long
End Type
Private Sub Form_Load()
Me.Show
Dim time1 As Date
Dim time2 As Date
Dim loopcounter As Long
Dim p() As pictype
Dim mypic As New StdPicture
Dim w As Long
Dim h As Long
Randomize 1
Me.ScaleMode = vbPixels
Set mypic = Picture1.Picture
zz = 150
ReDim p(zz) As pictype
For n = 1 To zz
p(n).x = Int(Rnd * 500)
p(n).y = Int(Rnd * 300)
p(n).z = 1 + Int(Rnd * 100)
Next n
Dim pp As pictype
time1 = Now
loopcounter = 0
Do
Me.Cls
For n = 1 To zz
Me.PaintPicture mypic, p(n).x, p(n).y, p(n).z, p(n).z
p(n).z = p(n).z + 3
q = p(n).x - (Me.ScaleWidth / 2)
p(n).x = p(n).x + (q / 20)
q = p(n).y - (Me.ScaleHeight / 2)
p(n).y = p(n).y + (q / 20)
If p(n).z >= 100 Then
p(n).z = 1
p(n).x = Int(Rnd * 500)
p(n).y = Int(Rnd * 300)
End If
Next n
loopcounter = loopcounter + 1
Label1 = loopcounter
DoEvents
Loop While loopcounter < 5000
time2 = Now
a$ = Format(time2 - time1, "long time")
MsgBox "Samlet tid:" & a$, , "Log"
End
End Sub
|