OVH Cloud OVH Cloud

à Yanick drawImage

4 réponses
Avatar
pradon
yanick !


merci.

Ton code me montre que le chargement de l'image est=20
effectivement tr=E8s rapide (m=EAme chez moi)et que le=20
probl=E8me se situe donc =E0 l' affichage :j'ai rajout=E9 le=20
code suivant( apr=E8s avoir cr=E9=E9 une picture image1 sur une=20
form1) :
n =3D GetTickCount()
Image1.Image =3D DirectCast(bmp, Bitmap)
MsgBox("temps d 'affichage=3D" & Str(GetTickCount() -
n)),

et j'ai retrouv=E9 la gal=E8re : 50 secondes environ pour=20
afficher.

J'ai le moral =E0 moiti=E9 remont=E9 !
le probl=E8me est pr=E9cis=E9, mais il est toujours l=E0 .
Reformulons le :
Combien de temps faut il pour afficher une image(d=E9j=E0=20
charg=E9e)de 60 mo =E0 l =E9cran ?
Il me faut toujours pr=E9s d'une minute en vbnet!
.....apr=E8s nouveau test le myst=E8re s'=E9paissie.
-sous VB6
le code suivant :
Private Sub Command1_Click()
Dim pic As Picture
Dim n As Long
n =3D GetTickCount
Set pic =3D LoadPicture("c:\temp\zd.bmp")
'chargement en m=E9moire
MsgBox GetTickCount - n =20
n =3D GetTickCount
'affichage =E0 l=E9cran
Image1.Picture =3D pic
MsgBox GetTickCount - n

End Sub

Donne :
Temps de chargement-> 22109 (22s)
Temps d'affichage ->610 (0.6s)

Sous VB net le code =E9quivalent(1) donne
Temps de chargement-> 4953 (5s)
Temps d'affichage -> 78 (0.076 s)

Ce serait merveilleux si le temps d'affichage r=E9=E9l=20
n '=E9tait pas de 50 s environ sur ma machine et,ce qui est=20
plus inqui=E9tant sur les machines cibles !

Peu tu tester ces lignes sur ta machine ?

Merci=20
(et merci par avance , de me consacrer encore un peu de=20
temps !)



(1) Private Declare Function GetTickCount=20
Lib "kernel32" () As Integer
Private Sub Command1_Click(ByVal eventSender As=20
System.Object, ByVal eventArgs As System.EventArgs)=20
Handles Command1.Click
=09
=09
Dim pic As System.Drawing.Image
Dim n As Integer
=09
n =3D GetTickCount
pic =3D System.Drawing.Image.FromFile
("c:\temp\zd.bmp")
MsgBox(GetTickCount - n)
n =3D GetTickCount
Image1.Image =3D pic
MsgBox(GetTickCount - n)
=09
End=20

>
>
>.
>
.

4 réponses

Avatar
jerome crevecoeur
As-tu essayé le double buffering?
Qui permet d'obtenir des performances plus interessantes

voir l'article de Frédéric Melantois à cette adresse:
http://www.dotnet-tech.com/tutoriels/double_buffering/


Cordialement

pradon a écrit :
yanick !


merci.

Ton code me montre que le chargement de l'image est
effectivement très rapide (même chez moi)et que le
problème se situe donc à l' affichage :j'ai rajouté le
code suivant( après avoir créé une picture image1 sur une
form1) :
n = GetTickCount()
Image1.Image = DirectCast(bmp, Bitmap)
MsgBox("temps d 'affichage=" & Str(GetTickCount() -
n)),

et j'ai retrouvé la galère : 50 secondes environ pour
afficher.

J'ai le moral à moitié remonté !
le problème est précisé, mais il est toujours là .
Reformulons le :
Combien de temps faut il pour afficher une image(déjà
chargée)de 60 mo à l écran ?
Il me faut toujours prés d'une minute en vbnet!
.....après nouveau test le mystère s'épaissie.
-sous VB6
le code suivant :
Private Sub Command1_Click()
Dim pic As Picture
Dim n As Long
n = GetTickCount
Set pic = LoadPicture("c:tempzd.bmp")
'chargement en mémoire
MsgBox GetTickCount - n
n = GetTickCount
'affichage à lécran
Image1.Picture = pic
MsgBox GetTickCount - n

End Sub

Donne :
Temps de chargement-> 22109 (22s)
Temps d'affichage ->610 (0.6s)

Sous VB net le code équivalent(1) donne
Temps de chargement-> 4953 (5s)
Temps d'affichage -> 78 (0.076 s)

Ce serait merveilleux si le temps d'affichage réél
n 'était pas de 50 s environ sur ma machine et,ce qui est
plus inquiétant sur les machines cibles !

Peu tu tester ces lignes sur ta machine ?

Merci
(et merci par avance , de me consacrer encore un peu de
temps !)



(1) Private Declare Function GetTickCount
Lib "kernel32" () As Integer
Private Sub Command1_Click(ByVal eventSender As
System.Object, ByVal eventArgs As System.EventArgs)
Handles Command1.Click


Dim pic As System.Drawing.Image
Dim n As Integer

n = GetTickCount
pic = System.Drawing.Image.FromFile
("c:tempzd.bmp")
MsgBox(GetTickCount - n)
n = GetTickCount
Image1.Image = pic
MsgBox(GetTickCount - n)

End



.




.




Avatar
Zoury
Salut Pradon! :O)

voici les tests et résultats avec la même image et le même ordi que le test
précédent (voir ici pour les "non-initiers" ;O) )
http://groups.google.com/groups?threadm=eZTMF6L%24EHA.3368%40TK2MSFTNGP10.phx.gbl


code VB6:
'***
' Form1
' 1 PictureBox
Option Explicit

Private Declare Function GetTickCount Lib "kernel32" () As Long
Private m_bIsLoaded As Boolean

Private Sub Form_Activate()

Dim pic As StdPicture
Dim t As Long
Dim t1 As Long
Dim t2 As Long

If (Not m_bIsLoaded) Then

t = GetTickCount
Set pic = LoadPicture("c:image.bmp")
t1 = GetTickCount - t

t = GetTickCount
Set Picture1.Picture = pic
t2 = GetTickCount - t

Debug.Print "Temps de chargement : " & t1 * 10 & " ms"
Debug.Print "Temps d'affichage : " & t2 * 10 & " ms"

m_bIsLoaded = True
End If

End Sub
'***

résultats VB6:
Temps de chargement : 4220 ms
Temps d'affichage : 160 ms


code VB.NET:
'***
' Form1
' 1 PictureBox
Option Explicit On

Imports System.Drawing
Imports System.Text.RegularExpressions

Public Class Form1
Inherits System.Windows.Forms.Form

Private Declare Function GetTickCount Lib "kernel32" () As Int32
Private m_bIsLoaded As Boolean

Private Sub Form1_Activated(ByVal sender As Object, ByVal e As
System.EventArgs) Handles MyBase.Activated

Dim img As Image
Dim t As Long
Dim t1 As Long
Dim t2 As Long

If (Not m_bIsLoaded) Then

t = GetTickCount()
img = Image.FromFile("c:image.bmp")
t1 = GetTickCount() - t

t = GetTickCount()
PictureBox1.Image = img
t2 = GetTickCount() - t

Console.WriteLine("Temps de chargement : {0} ms", t1 * 10)
Console.WriteLine("Temps d'affichage : {0} ms", t2 * 10)

m_bIsLoaded = True
End If

End Sub
End Class
'***

résultats VB.NET:
Temps de chargement : 1880 ms
Temps d'affichage : 160 ms



les résultats sont pour le premier test.. les autres sont plus rapides
(cache).
<zelle>pour avoir une idée plus précise, j'imagine qu'il faudrait redémarrer
l'ordi entre chaque test... faire des milliers de test et calculé la moyenne
:OD</zelle>

--
Cordialement
Yanick
MVP pour Visual Basic
"pradon" a écrit dans le message de
news:1c1301c4fd51$815fe420$
yanick !


merci.

Ton code me montre que le chargement de l'image est
effectivement très rapide (même chez moi)et que le
problème se situe donc à l' affichage :j'ai rajouté le
code suivant( après avoir créé une picture image1 sur une
form1) :
n = GetTickCount()
Image1.Image = DirectCast(bmp, Bitmap)
MsgBox("temps d 'affichage=" & Str(GetTickCount() -
n)),

et j'ai retrouvé la galère : 50 secondes environ pour
afficher.

J'ai le moral à moitié remonté !
le problème est précisé, mais il est toujours là .
Reformulons le :
Combien de temps faut il pour afficher une image(déjà
chargée)de 60 mo à l écran ?
Il me faut toujours prés d'une minute en vbnet!
.....après nouveau test le mystère s'épaissie.
-sous VB6
le code suivant :
Private Sub Command1_Click()
Dim pic As Picture
Dim n As Long
n = GetTickCount
Set pic = LoadPicture("c:tempzd.bmp")
'chargement en mémoire
MsgBox GetTickCount - n
n = GetTickCount
'affichage à lécran
Image1.Picture = pic
MsgBox GetTickCount - n

End Sub

Donne :
Temps de chargement-> 22109 (22s)
Temps d'affichage ->610 (0.6s)

Sous VB net le code équivalent(1) donne
Temps de chargement-> 4953 (5s)
Temps d'affichage -> 78 (0.076 s)

Ce serait merveilleux si le temps d'affichage réél
n 'était pas de 50 s environ sur ma machine et,ce qui est
plus inquiétant sur les machines cibles !

Peu tu tester ces lignes sur ta machine ?

Merci
(et merci par avance , de me consacrer encore un peu de
temps !)



(1) Private Declare Function GetTickCount
Lib "kernel32" () As Integer
Private Sub Command1_Click(ByVal eventSender As
System.Object, ByVal eventArgs As System.EventArgs)
Handles Command1.Click


Dim pic As System.Drawing.Image
Dim n As Integer

n = GetTickCount
pic = System.Drawing.Image.FromFile
("c:tempzd.bmp")
MsgBox(GetTickCount - n)
n = GetTickCount
Image1.Image = pic
MsgBox(GetTickCount - n)

End



.



.
Avatar
Zoury
> Imports System.Text.RegularExpressions



et on a évidemment pas besoin de ce namespace. je l'avais ajouté pour
faires des tests..

--
Cordialement
Yanick
MVP pour Visual Basic
Avatar
Pradon
merci jerome pour ton conseil !
Mais cela semble bien compliqué, le double buffering,
d'autant que le code exemple du site n'est pas compatible
avec ma version Visual studio de 2002 !

En fait ,je ne recherche pas la performance ; s'agissant
d'une migration depuis VB6 ,j' espérais, à code
équivalent au moins des performances similaires .


-----Message d'origine-----
As-tu essayé le double buffering?
Qui permet d'obtenir des performances plus interessantes

voir l'article de Frédéric Melantois à cette adresse:
http://www.dotnet-tech.com/tutoriels/double_buffering/


Cordialement