Men tänkte ta upp Dim. Efter som VB.Net öppnar upp möjligheten att ge den värde.<br> Inte bara bra, utan JÄTTEBRA!! Ditt initiativ alltså. Det finns en dal saker som man undrar över ibland och just exemplet du tar upp är en sådan. har du ork att testa hur skillnaderna blir om man skickar in parametrar i konstruktören? >Jag tolkar resultatet som att medlemarna på Objekt skapade med As New är långsammare. Håller fullständigt med. Okej då... *Skäms hemskt mycket* Ingen fara. Får skylla på att jag installerade Visual Studio Förra veckan. Dim C As New TestClass Vs. Dim C AS TestClass = New TestClass
<br>
<h5>Låt oss börja med hur det fungerade i VB6</h5>
Keklarerar vi en variabel
<code>
Dim C As TestClass
</code>
Deklarerar vi en variabel som skapar en ny instans om den ej är satt:
<code>
Dim C As New TestClass
</code>
<h5>Hur ser det ut i VB.NET</h5>
Keklarerar vi en variabel
<code>
Dim C As TestClass
</code>
Deklarerar vi en variabel tilldelar den ett värde:
<code>
Dim C As TestClass = New TestClass
</code>
Förenklad variant av ovan(Fast något långsammare):
<code>
Dim C As New TestClass
</code>
<h5>Vad säger MSDN</h5>
Dim [ WithEvents ] name[ (boundlist) ] [ As [ New ] type ] [ = initexpr ]<br>
<B>New</B><br>
Optional. Keyword that enables immediate creation of an object. If you use New when declaring the object variable, a new instance of the object is created when the Dim statement is executed.<br>
<br>
<B>initexpr</B><br>
Optional. Expression that is evaluated and assigned to the variable when it is created. If you declare more than one variable with the same As clause, you cannot supply initexpr for that group of variables.
<h5>Prestanda test</h5>
<code>
Public Class Form1
Inherits System.Windows.Forms.Form
'# Windows Form Designer generated code #
Private Declare Function QueryPerformanceCounter Lib "kernel32" (ByRef lpPerformanceCount As Int64) As Long
Private Declare Function QueryPerformanceFrequency Lib "kernel32" (ByRef lpFrequency As Int64) As Long
Private Times As Integer
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim Index As Integer
Dim SubIndex As Integer
Dim lpFrequency As Int64
Dim lpStartCount As Int64
Dim lpStopCount As Int64
If QueryPerformanceFrequency(lpFrequency) Then
For Index = 1 To 5
Debug.WriteLine("Loop: " & Index)
Times = 10 * 10 ^ Index
QueryPerformanceCounter(lpStartCount)
For SubIndex = 1 To Times
Test1a()
Test1a()
Test1a()
Test1a()
Test1a()
Next
QueryPerformanceCounter(lpStopCount)
Debug.WriteLine(" Test1a Result: " & lpStopCount - lpStartCount)
QueryPerformanceCounter(lpStartCount)
For SubIndex = 1 To Times
Test2a()
Test2a()
Test2a()
Test2a()
Test2a()
Next
QueryPerformanceCounter(lpStopCount)
Debug.WriteLine(" Test2a Result: " & lpStopCount - lpStartCount)
QueryPerformanceCounter(lpStartCount)
For SubIndex = 1 To Times
Test3a()
Test3a()
Test3a()
Test3a()
Test3a()
Next
QueryPerformanceCounter(lpStopCount)
Debug.WriteLine(" Test3a Result: " & lpStopCount - lpStartCount)
QueryPerformanceCounter(lpStartCount)
Test1b()
Test1b()
Test1b()
Test1b()
Test1b()
QueryPerformanceCounter(lpStopCount)
Debug.WriteLine(" Test1b Result: " & lpStopCount - lpStartCount)
QueryPerformanceCounter(lpStartCount)
Test2b()
Test2b()
Test2b()
Test2b()
Test2b()
QueryPerformanceCounter(lpStopCount)
Debug.WriteLine(" Test2b Result: " & lpStopCount - lpStartCount)
QueryPerformanceCounter(lpStartCount)
Test3b()
Test3b()
Test3b()
Test3b()
Test3b()
QueryPerformanceCounter(lpStopCount)
Debug.WriteLine(" Test3b Result: " & lpStopCount - lpStartCount)
Next
Else
'"Your hardware doesn't support a high-resolution performance counter!"
End If
'PerformanceCounter.
End Sub
Private Sub Test1a()
Dim T As Integer
Dim C As New TestClass()
End Sub
Private Sub Test2a()
Dim T As Integer
Dim C As TestClass = New TestClass()
End Sub
Private Sub Test3a()
Dim T As Integer
Dim C As TestClass
C = New TestClass()
End Sub
Private Sub Test1b()
Dim T As Integer
Dim C As New TestClass()
For T = 0 To Times
C.Test()
C.Test()
C.Test()
C.Test()
C.Test()
Next
End Sub
Private Sub Test2b()
Dim T As Integer
Dim C As TestClass = New TestClass()
For T = 0 To Times
C.Test()
C.Test()
C.Test()
C.Test()
C.Test()
Next
End Sub
Private Sub Test3b()
Dim T As Integer
Dim C As TestClass
C = New TestClass()
For T = 0 To Times
C.Test()
C.Test()
C.Test()
C.Test()
C.Test()
Next
End Sub
End Class
Friend Class TestClass
Sub Test()
End Sub
End Class
</code>
<h5>Resultat</h5>
Loop: 1<br>
Test1a Result: 4695<br>
Test2a Result: 4555<br>
Test3a Result: 3625<br>
Test1b Result: 8283<br>
Test2b Result: 4590<br>
Test3b Result: 4193<br>
Loop: 2<br>
Test1a Result: 7760<br>
Test2a Result: 3337<br>
Test3a Result: 7774<br>
Test1b Result: 3042<br>
Test2b Result: 1799<br>
Test3b Result: 2106<br>
Loop: 3<br>
Test1a Result: 42059<br>
Test2a Result: 44234<br>
Test3a Result: 41610<br>
Test1b Result: 17912<br>
Test2b Result: 16629<br>
Test3b Result: 16897<br>
Loop: 4<br>
Test1a Result: 413195<br>
Test2a Result: 384847<br>
Test3a Result: 381581<br>
Test1b Result: 185610<br>
Test2b Result: 167719<br>
Test3b Result: 167529<br>
Loop: 5<br>
Test1a Result: 3933846<br>
Test2a Result: 3879776<br>
Test3a Result: 3963972<br>
Test1b Result: 1809115<br>
Test2b Result: 1683760<br>
Test3b Result: 1665825<br>
<h5>Summering</h5>
Jag tolkar resultatet som att medlemarna på Objekt skapade med As New är långsammare.Sv: Dim C As New TestClass Vs. Dim C AS TestClass = New TestClass
Jag tacka för hjälpen..
//Mikael
Lite snabbare nu :-)Sv: Dim C As New TestClass Vs. Dim C AS TestClass = New TestClass
Sv: Dim C As New TestClass Vs. Dim C AS TestClass = New TestClass
Näädu, det här säger absolut ingenting.
För det första, se till att mäta tiden på optimerad kod som inte kör under debuggern. Något annat är ganska ointressant.
För det andra, testa att kasta om ordningen i vilken de olika Test metoderna körs, och jämför resultaten.
För det tredje, kolla in den genererade IL koden med ILDASM. Du kommer se att koden för Test1a, Test2a och Test3a är exakt likadan, och samma gäller Test1b, Test2b och Test3b.
Så om du ser några skillnader mellan dessa beror det nog mest på rena tillfälligheter. Exempelvis var GC kickar in och rensar upp några av alla dina objekt du skapar.
MSSv: Dim C As New TestClass Vs. Dim C AS TestClass = New TestClass
Ganska ointressant test.
En riktlinje gällande optimeringar övrer huvudtaget är att optimera algoritmiskt och inte på instruktionsnivå.
ha en bra dag :o)Sv: Dim C As New TestClass Vs. Dim C AS TestClass = New TestClass
Men nu vet jag och alla andra det. Så jag tackar för upplysningen.
Även om jag nu gjorde bort mig.
;O)Sv: Dim C As New TestClass Vs. Dim C AS TestClass = New TestClass
Man ska våga skriva om det är nåt man undrar över.
Hellre bortgjord än undrande.
Förr eller senare kommer jag väl åxå göra det (om jag inte redan har det)
Dessutom gör man ju nån annan glad som får visa sig på styva linan, men det är ju det som är tjusningen med ett sånt här forum.
Fortsätt fråga bara...Sv: Dim C As New TestClass Vs. Dim C AS TestClass = New TestClass
Får säga det att ILDASM är ett snyggt program.