OVH Cloud OVH Cloud

connaissez vous un moyen plus efficace ?

2 réponses
Avatar
Bismark Prods
Option Explicit

Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As
Any, pSrc As Any, ByVal ByteLen As Long)
Private Type Couleur
rCol As Byte
gCol As Byte
bCol As Byte
End Type

Private Sub Form_Load()
Dim wCol As Long
Dim Col As Couleur

wCol = &HC000C0

Call CopyMemory(Col, wCol, 3)

Debug.Print Hex(Col.rCol) & " " & Hex(Col.gCol) & " " & Hex(Col.bCol)

End Sub

2 réponses

Avatar
Zoury
Salut! :O)

: Trouvé dans l'API Guide mais AMHA beaucoup plus long...

un benchmark s'impose.. :O)))

'***
Option Explicit

Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As
Any, pSrc As Any, ByVal ByteLen As Long)
Private Type tColor
r As Byte
g As Byte
b As Byte
End Type

Private Sub Main()

Const NUM_LOOP As Long = 500000
Dim i As Long
Dim sw As CStopWatch
Dim tLoop As Long
Dim t1 As Long
Dim t2 As Long
Dim c As tColor
Dim l As Long

Set sw = New CStopWatch
Randomize

sw.Reset
For i = 0 To NUM_LOOP
l = RGB(Rnd * 255, Rnd * 255, Rnd * 255)
Next i
tLoop = sw.Elapsed

sw.Reset
For i = 0 To NUM_LOOP
l = RGB(Rnd * 255, Rnd * 255, Rnd * 255)
c = GetColorCopyMemory(l)
Next i
t1 = sw.Elapsed

sw.Reset
For i = 0 To NUM_LOOP
l = RGB(Rnd * 255, Rnd * 255, Rnd * 255)
c = GetColor(l)
Next i
t2 = sw.Elapsed

Debug.Print "Nombre de boucles : " & NUM_LOOP
Debug.Print "Temps de la boucle : " & tLoop & " ms"
Debug.Print "GetColorCopyMemory : " & t1 - tLoop & " ms"
Debug.Print "GetColor : " & t2 - tLoop & " ms"

End Sub

Private Function GetColorCopyMemory(ByRef lColor As Long) As tColor
Call CopyMemory(GetColorCopyMemory, lColor, 3)
End Function

Private Function GetColor(ByRef lColor As Long) As tColor
With GetColor
.r = lColor And &HFF&
.g = (lColor &H100&) And &HFF&
.b = (lColor &H10000) And &HFF&
End With
End Function
'***

Résultats :
Nombre de boucles : 500000
Temps de la boucle : 306 ms
GetColorCopyMemory : 270 ms
GetColor : 423 ms

Cette version de la fonction GetColor est légèrement différente de l'autre,
celle devrait logiquement être plus rapide étant donnée qu'il y a moins de
calcul. Le CopyMemory est donc plus rapide comme tu le soupçonnait. :O)

Obtenez la classe CStopWatch
http://www.mvps.org/vb/samples.htm

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/
Avatar
Zoury
: Haméçon mordu !! HéHé :O))))))

;O)