🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.vbasic
Article #92287

Puste petle, The Test - VB.Net

#92287
From: Doker
Date: Fri, 21 Oct 2005 07:46
160 lines
4199 bytes
Postanowilem sprawdzić predkosc przetwarzania róznych pętli:

        Dim m As Integer
        For m = 1 To 500000000
        Next

        For i As Integer = 1 To 500000000
        Next

        Dim l As Integer
        While l < 500000000
            l += 1
        End While

        Dim k As Integer
        Do While k < 500000000
            k += 1
        Loop


        Dim j As Integer
        Do Until j = 500000000
            j += 1
        Loop

(przez inner for oznaczam ta petle for ktora deklaruje iterator w swojej 
kontrukji - petle z 'i',
przez outer petle 'm')

Pierwsze wyniki były ciekawe

-Debug-
outer for:1,875
inner for:1,859375
while:1,828125
do while:2,671875
do until:1,84375

-Release-
outer for:1,859375
inner for:2,359375
while:2,671875
do while:2,34375
do until:2,5625

W release prędkość spadla!
Dziwilo mnie zwlaszcza dlaczego do while jest wolniejsze od do until.
Postanowilem spradzic inne warunki dla while:

-Debug-
do while:2,6875  While Not k = 500000000

-Debug-
do while:2,671875 While k <> 500000000

Nadal zdecydowanie wolniej...
Co wiec moze być przyczyna?

Może kolejność w kodzie...?
Zaminiam petle while kolejnoscia z petla until
i coż, teraz until przyjmuje wyniki takie jak wczeniej while.

Mysle wiec, ze kompilator zarzadza pamiecia w calkiem sprytny sposob jednak nie 
potrafi przewidziec kiedy pozbyc sie poprzedniej zmiennej.
Co wiec robie. Po kazdej petli wstawiam
m = nothing, pozniej
l = nothing ....

        Dim l As Integer
        While l < 500000000
            l += 1
        End While
        l = nothing

        Dim k As Integer
        Do While k < 500000000
            k += 1
        Loop
        k = nothing

I cóż to daje.

-Debug-
outer for:1,90625
inner for:2,6875
while:2,65625
do while:2,671875
do until:2,21875

Zupelnie nic. Nawet gorsze rezultaty.
Mysle, że pewnie takie podstawienie nothing nie robi tego co ja mysle...
sprobuje inaczej. Moze wyglada to mniej estetycznie i vbasickowo ale 
sprobujemy.
zamiast l = nothing
wstawiam
        GC.ReRegisterForFinalize(l)
i co uzyskuje?

-Debug-
outer for:1,84375
inner for:2,25
while:2,25
do while:1,84375
do until:1,859375

-Release-
outer for:1,859375
inner for:1,859375
while:2,578125
do while:2,640625
do until:2,65625

Dla porownania moje pierwsze wyniki:
-Debug-
outer for:1,875
inner for:1,859375
while:1,828125
do while:2,671875
do until:1,84375

-Release-
outer for:1,859375
inner for:2,359375
while:2,34375
do while:2,34375
do until:2,5625

Wiadomym jest i oczywistym, ze do badania czasu uzywam zmiennych double
.....
        Next

        t2 = DateAndTime.Timer

        Dim l As Integer
        While l <> 500000000
            l += 1
....
Je tez postanowilem rejestrowac.
Wynik:

-Debug-
outer for:1,875
inner for:1,859375
while:2,234375
do while:1,828125
do until:2,21875

-Release-
outer for:1,875
inner for:1,875
while:2,546875
do while:2,828125
do until:2,65625

Szczerze mowiac nabralem tylko watpliwosci czy to rejestrowanie do finalizacji 
dziala wogole na te zmienne.
W jakis sposob wydanie tego polecenia ma wplyw na prace petli, ale jaki tego 
nie mam pojecia.
Widac jednak jak mala zmiana moze mocno wplynac na wydajnosc calego programu 
jesli zawarty jest w petli...
Technical Details
Message-ID: <dja6pb$17qh$1@node3.news.atman.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!newsfeed.atman.pl!not-for-mail

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!newsfeed.atman.pl!not-for-mail
From: "Doker" <doker0@wp.pl>
Newsgroups: pl.comp.programming,pl.comp.lang.vbasic
Subject: Puste petle, The Test - VB.Net
Date: Fri, 21 Oct 2005 09:46:18 +0200
Organization: ATMAN
Lines: 164
Message-ID: <dja6pb$17qh$1@node3.news.atman.pl>
NNTP-Posting-Host: staticline3248.toya.net.pl
Mime-Version: 1.0
X-Trace: node3.news.atman.pl 1129881195 40785 217.113.238.132 (21 Oct 2005 07:53:15 GMT)
X-Complaints-To: abuse@atman.pl
NNTP-Posting-Date: Fri, 21 Oct 2005 07:53:15 +0000 (UTC)
X-Priority: 3
X-MSMail-Priority: Normal
X-Newsreader: Microsoft Outlook Express 6.00.2900.2527
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2527
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit