Je n'arrive pas =E0 croire que VB.net soit moins performant=20
que vb6 quand il s'agit de traiter des bitmaps.
Quelqu'un peut il charger une grosse bitmap (30 mo au=20
moins) sous VB6 ,puis sous VbNet et me donner les temps=20
respectifs de chargement .
Les codes vb6 et vbnet pouvant =EAtre utilis=E9s sont les=20
suivants :
Code ultra simplifi=E9 en VB 6:=20
Private Sub Command1_Click()
Image1.Picture =3D LoadPicture("c:\temp\votreimage.bmp")
End Sub
Le m=EAme code en VB Net
Private Sub Command1_Click(ByVal eventSender As=20
System.Object, ByVal eventArgs As System.EventArgs)=20
Handles Command1.Click =20
Image1.Image =3D System.Drawing.Image.FromFile
("c:\temp\votreimage.bmp") =20
End Sub
Merci!..j'esp=E8re des r=E9sultats positifs! apr=E8s tous ces=20
efforts, je ne me vois pas retourner au VB6!..qui n'est=20
m=EAme plus commercialis=E9!
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 Pradon!
J'ai fait quelques tests sur un bitmap 24bits (6400x3600) fesant 65,9 Mo sur le disque. J'obtiens des résultats tournant autour de 190 ticks en .NET (en Debug et en Release) et d'environ 405 ticks pour VB6 sur Windows XP Pro Sp1 (Pentium 4, 2.8Ghz, 1Go RAM).
Note que si j'enlève le bmp.Dispose(), le temps de chargement double à chaque deux tests environ.
VB6 '*** Private Declare Function GetTickCount Lib "kernel32" () As Long
Private Sub Command1_Click()
Dim pic As StdPicture Dim n As Long
n = GetTickCount Set pic = LoadPicture("c:image.bmp") Debug.Print GetTickCount - n
End Sub '***
VB.NET '*** Private Declare Function GetTickCount Lib "kernel32" () As Int32
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim n As Int32 = GetTickCount() Dim bmp As Bitmap = DirectCast(Image.FromFile("C:image.bmp"), Bitmap) Console.WriteLine(GetTickCount() - n) bmp.Dispose() End Sub '***
Je ne sais vraiment pas pourquoi la différence entre les méthodes prend est aussi grande chez toi.. peut-être ton ordi est-il occupé à autres choses durant le chargement ou encore ta mémoire vive est surchargée ?
-- Cordialement Yanick MVP pour Visual Basic "pradon" a écrit dans le message de news:182a01c4fcb3$86bf8360$ bonjour à tous!
Je n'arrive pas à croire que VB.net soit moins performant que vb6 quand il s'agit de traiter des bitmaps.
Quelqu'un peut il charger une grosse bitmap (30 mo au moins) sous VB6 ,puis sous VbNet et me donner les temps respectifs de chargement .
Les codes vb6 et vbnet pouvant être utilisés sont les suivants :
Code ultra simplifié en VB 6: Private Sub Command1_Click() Image1.Picture = LoadPicture("c:tempvotreimage.bmp") End Sub
Le même code en VB Net Private Sub Command1_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles Command1.Click Image1.Image = System.Drawing.Image.FromFile ("c:tempvotreimage.bmp") End Sub
Merci!..j'espère des résultats positifs! après tous ces efforts, je ne me vois pas retourner au VB6!..qui n'est même plus commercialisé!
Salut Pradon!
J'ai fait quelques tests sur un bitmap 24bits (6400x3600) fesant 65,9 Mo sur
le disque.
J'obtiens des résultats tournant autour de 190 ticks en .NET (en Debug et en
Release) et d'environ 405 ticks pour VB6 sur Windows XP Pro Sp1 (Pentium 4,
2.8Ghz, 1Go RAM).
Note que si j'enlève le bmp.Dispose(), le temps de chargement double à
chaque deux tests environ.
VB6
'***
Private Declare Function GetTickCount Lib "kernel32" () As Long
Private Sub Command1_Click()
Dim pic As StdPicture
Dim n As Long
n = GetTickCount
Set pic = LoadPicture("c:image.bmp")
Debug.Print GetTickCount - n
End Sub
'***
VB.NET
'***
Private Declare Function GetTickCount Lib "kernel32" () As Int32
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
Dim n As Int32 = GetTickCount()
Dim bmp As Bitmap = DirectCast(Image.FromFile("C:image.bmp"), Bitmap)
Console.WriteLine(GetTickCount() - n)
bmp.Dispose()
End Sub
'***
Je ne sais vraiment pas pourquoi la différence entre les méthodes prend est
aussi grande chez toi.. peut-être ton ordi est-il occupé à autres choses
durant le chargement ou encore ta mémoire vive est surchargée ?
--
Cordialement
Yanick
MVP pour Visual Basic
"pradon" <anonymous@discussions.microsoft.com> a écrit dans le message de
news:182a01c4fcb3$86bf8360$a301280a@phx.gbl...
bonjour à tous!
Je n'arrive pas à croire que VB.net soit moins performant
que vb6 quand il s'agit de traiter des bitmaps.
Quelqu'un peut il charger une grosse bitmap (30 mo au
moins) sous VB6 ,puis sous VbNet et me donner les temps
respectifs de chargement .
Les codes vb6 et vbnet pouvant être utilisés sont les
suivants :
Code ultra simplifié en VB 6:
Private Sub Command1_Click()
Image1.Picture = LoadPicture("c:tempvotreimage.bmp")
End Sub
Le même code en VB Net
Private Sub Command1_Click(ByVal eventSender As
System.Object, ByVal eventArgs As System.EventArgs)
Handles Command1.Click
Image1.Image = System.Drawing.Image.FromFile
("c:tempvotreimage.bmp")
End Sub
Merci!..j'espère des résultats positifs! après tous ces
efforts, je ne me vois pas retourner au VB6!..qui n'est
même plus commercialisé!
J'ai fait quelques tests sur un bitmap 24bits (6400x3600) fesant 65,9 Mo sur le disque. J'obtiens des résultats tournant autour de 190 ticks en .NET (en Debug et en Release) et d'environ 405 ticks pour VB6 sur Windows XP Pro Sp1 (Pentium 4, 2.8Ghz, 1Go RAM).
Note que si j'enlève le bmp.Dispose(), le temps de chargement double à chaque deux tests environ.
VB6 '*** Private Declare Function GetTickCount Lib "kernel32" () As Long
Private Sub Command1_Click()
Dim pic As StdPicture Dim n As Long
n = GetTickCount Set pic = LoadPicture("c:image.bmp") Debug.Print GetTickCount - n
End Sub '***
VB.NET '*** Private Declare Function GetTickCount Lib "kernel32" () As Int32
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim n As Int32 = GetTickCount() Dim bmp As Bitmap = DirectCast(Image.FromFile("C:image.bmp"), Bitmap) Console.WriteLine(GetTickCount() - n) bmp.Dispose() End Sub '***
Je ne sais vraiment pas pourquoi la différence entre les méthodes prend est aussi grande chez toi.. peut-être ton ordi est-il occupé à autres choses durant le chargement ou encore ta mémoire vive est surchargée ?
-- Cordialement Yanick MVP pour Visual Basic "pradon" a écrit dans le message de news:182a01c4fcb3$86bf8360$ bonjour à tous!
Je n'arrive pas à croire que VB.net soit moins performant que vb6 quand il s'agit de traiter des bitmaps.
Quelqu'un peut il charger une grosse bitmap (30 mo au moins) sous VB6 ,puis sous VbNet et me donner les temps respectifs de chargement .
Les codes vb6 et vbnet pouvant être utilisés sont les suivants :
Code ultra simplifié en VB 6: Private Sub Command1_Click() Image1.Picture = LoadPicture("c:tempvotreimage.bmp") End Sub
Le même code en VB Net Private Sub Command1_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles Command1.Click Image1.Image = System.Drawing.Image.FromFile ("c:tempvotreimage.bmp") End Sub
Merci!..j'espère des résultats positifs! après tous ces efforts, je ne me vois pas retourner au VB6!..qui n'est même plus commercialisé!
Patrice Ongla
> VB6 '*** Private Declare Function GetTickCount Lib "kernel32" () As Long
Private Sub Command1_Click()
Dim pic As StdPicture Dim n As Long
n = GetTickCount Set pic = LoadPicture("c:image.bmp") Debug.Print GetTickCount - n
End Sub '***
VB.NET '*** Private Declare Function GetTickCount Lib "kernel32" () As Int32
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim n As Int32 = GetTickCount() Dim bmp As Bitmap = DirectCast(Image.FromFile("C:image.bmp"), Bitmap) Console.WriteLine(GetTickCount() - n) bmp.Dispose() End Sub '***
C'est fou comme vb.net parait verbeux vu comme ça... :) (VB6 : 7 lignes, 133 carcatères / VB.Net : 8 l, 296 c)
Allez, rassurez-vous, je regrette pas :)
> VB6
'***
Private Declare Function GetTickCount Lib "kernel32" () As Long
Private Sub Command1_Click()
Dim pic As StdPicture
Dim n As Long
n = GetTickCount
Set pic = LoadPicture("c:image.bmp")
Debug.Print GetTickCount - n
End Sub
'***
VB.NET
'***
Private Declare Function GetTickCount Lib "kernel32" () As Int32
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
Dim n As Int32 = GetTickCount()
Dim bmp As Bitmap = DirectCast(Image.FromFile("C:image.bmp"), Bitmap)
Console.WriteLine(GetTickCount() - n)
bmp.Dispose()
End Sub
'***
C'est fou comme vb.net parait verbeux vu comme ça... :)
(VB6 : 7 lignes, 133 carcatères / VB.Net : 8 l, 296 c)
> VB6 '*** Private Declare Function GetTickCount Lib "kernel32" () As Long
Private Sub Command1_Click()
Dim pic As StdPicture Dim n As Long
n = GetTickCount Set pic = LoadPicture("c:image.bmp") Debug.Print GetTickCount - n
End Sub '***
VB.NET '*** Private Declare Function GetTickCount Lib "kernel32" () As Int32
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim n As Int32 = GetTickCount() Dim bmp As Bitmap = DirectCast(Image.FromFile("C:image.bmp"), Bitmap) Console.WriteLine(GetTickCount() - n) bmp.Dispose() End Sub '***
C'est fou comme vb.net parait verbeux vu comme ça... :) (VB6 : 7 lignes, 133 carcatères / VB.Net : 8 l, 296 c)
Allez, rassurez-vous, je regrette pas :)
Zoury
> C'est fou comme vb.net parait verbeux vu comme ça... :) (VB6 : 7 lignes, 133 carcatères / VB.Net : 8 l, 296 c)
haha! je n'y avais jamais porté attention. :O)
-- Cordialement Yanick MVP pour Visual Basic
> C'est fou comme vb.net parait verbeux vu comme ça... :)
(VB6 : 7 lignes, 133 carcatères / VB.Net : 8 l, 296 c)
> C'est fou comme vb.net parait verbeux vu comme ça... :) (VB6 : 7 lignes, 133 carcatères / VB.Net : 8 l, 296 c)
haha! je n'y avais jamais porté attention. :O)
-- Cordialement Yanick MVP pour Visual Basic
Pradon
>-----Message d'origine-----
C'est fou comme vb.net parait verbeux vu comme ça... :) (VB6 : 7 lignes, 133 carcatères / VB.Net : 8 l, 296 c)
haha! je n'y avais jamais porté attention. :O)
-- Cordialement Yanick MVP pour Visual Basic
à 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 (22s) 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 !)
C'est vrai que c'est verbeux, moi j'aurai bien vu l'utilisation de couleurs différentes une pour le code ajouté par le compilateur ,une pour pour les déclarations de variables et toutes les floritures incontournables,enfin une autre pour "le vrai code" celui qui parle quand on le lit,avec possibilité de masquer les 2 premières couleurs.
(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
.
>-----Message d'origine-----
C'est fou comme vb.net parait verbeux vu comme ça... :)
(VB6 : 7 lignes, 133 carcatères / VB.Net : 8 l, 296 c)
haha! je n'y avais jamais porté attention. :O)
--
Cordialement
Yanick
MVP pour Visual Basic
à 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 (22s)
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 !)
C'est vrai que c'est verbeux, moi j'aurai bien vu
l'utilisation de couleurs différentes une pour le code
ajouté par le compilateur ,une pour pour les déclarations
de variables et toutes les floritures
incontournables,enfin une autre pour "le vrai code" celui
qui parle quand on le lit,avec possibilité de masquer les
2 premières couleurs.
(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)
C'est fou comme vb.net parait verbeux vu comme ça... :) (VB6 : 7 lignes, 133 carcatères / VB.Net : 8 l, 296 c)
haha! je n'y avais jamais porté attention. :O)
-- Cordialement Yanick MVP pour Visual Basic
à 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 (22s) 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 !)
C'est vrai que c'est verbeux, moi j'aurai bien vu l'utilisation de couleurs différentes une pour le code ajouté par le compilateur ,une pour pour les déclarations de variables et toutes les floritures incontournables,enfin une autre pour "le vrai code" celui qui parle quand on le lit,avec possibilité de masquer les 2 premières couleurs.
(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)