Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Dim C As New TestClass Vs. Dim C AS TestClass = New TestClass

Postades av 2002-08-06 12:41:31 - Andreas Hillqvist, i forum vb.net, Tråden har 8 Kommentarer och lästs av 872 personer

Men tänkte ta upp Dim. Efter som VB.Net öppnar upp möjligheten att ge den värde.<br>
<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.


Svara

Sv: Dim C As New TestClass Vs. Dim C AS TestClass = New TestClass

Postades av 2002-08-06 12:54:54 - Mikael Sand

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.

Jag tacka för hjälpen..

//Mikael
Lite snabbare nu :-)


Svara

Sv: Dim C As New TestClass Vs. Dim C AS TestClass = New TestClass

Postades av 2002-08-06 13:45:07 - Pontus Wång

har du ork att testa hur skillnaderna blir om man skickar in parametrar i konstruktören?


Svara

Sv: Dim C As New TestClass Vs. Dim C AS TestClass = New TestClass

Postades av 2002-08-06 15:14:43 - Mattias Sjögren

>Jag tolkar resultatet som att medlemarna på Objekt skapade med As New är långsammare.


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.


MS


Svara

Sv: Dim C As New TestClass Vs. Dim C AS TestClass = New TestClass

Postades av 2002-08-06 15:54:37 - Magnus Åhlin

Håller fullständigt med.
Ganska ointressant test.

En riktlinje gällande optimeringar övrer huvudtaget är att optimera algoritmiskt och inte på instruktionsnivå.

ha en bra dag :o)


Svara

Sv: Dim C As New TestClass Vs. Dim C AS TestClass = New TestClass

Postades av 2002-08-06 16:37:47 - Andreas Hillqvist

Okej då... *Skäms hemskt mycket*

Men nu vet jag och alla andra det. Så jag tackar för upplysningen.
Även om jag nu gjorde bort mig.

;O)



Svara

Sv: Dim C As New TestClass Vs. Dim C AS TestClass = New TestClass

Postades av 2002-08-06 17:04:35 - Magnus Åhlin

Ingen fara.
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...


Svara

Sv: Dim C As New TestClass Vs. Dim C AS TestClass = New TestClass

Postades av 2002-08-06 17:35:11 - Andreas Hillqvist

Får skylla på att jag installerade Visual Studio Förra veckan.

Får säga det att ILDASM är ett snyggt program.


Svara

Nyligen

  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo
  • 14:25 Tips på verktyg för att skapa QR-k
  • 14:23 Tips på verktyg för att skapa QR-k
  • 20:52 Fungerer innskuddsbonuser egentlig

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 154
27 952
271 704
856
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies