/ Forside / Teknologi / Udvikling / VB/Basic / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
VB/Basic
#NavnPoint
berpox 2425
pete 1435
CADmageren 1251
gibson 1230
Phylock 887
gandalf 836
AntonV 790
strarup 750
Benjamin... 700
10  tom.kise 610
VB6-grafik 40% langsommere i XP end i 98
Fra : Erling Grønlund


Dato : 15-10-05 17:16

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

 
 
Søg
Reklame
Statistik
Spørgsmål : 177579
Tips : 31968
Nyheder : 719565
Indlæg : 6409075
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste