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
  
            
             |