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
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
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
: 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
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
: 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
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