MacceMedlem sedan apr. 2001425 inlägg Hej !
Mäter mina skript med Timer(), tycker att det ger någorlunda
fingervisning om hur lång tid saker och ting tar.
Men hur pålitligt blir detta när jag har en sida utan db connection
men med en del stränghantering, vid tidmätning där får jag
oftast dessa tre olika tider 11.71875ms, 0ms och 7.8125ms
Tycker att det är lite märkligt att det kan variera så mycket
speciellt att det kan bli 0ms ???
Finns det någon gratiskomponent som är "vassare" än timer ?
Mvh
nikoMedlem sedan juni 20022 599 inlägg Först och främst ska man ha klart för sig att Timer() inte mäter exekveringstiden för ditt script, utan exekveringstiden för samtliga 350(?) trådar och processer i Windows från att ditt script börjar tills det slutar.
Om man har korta script så kan man alltså få kraftiga variationer beroende på vad Windows råkar ha för sig just då.
Finns det någon gratiskomponent som är "vassare" än timer ?
Det finns timers i Windows som är mer exakta än Timer() fast det kommer inte att lösa problemet med variationerna. Vad du skulle behöva är en komponent som bara mäter tiden som ditt script använder. Det vet jag inte om det finns någon .. (Kanske ett projekt för någon?)
Annars kan du ju alltid upprepa koden i dina script X antal gånger för att få längre tider och vettigare värden att jämföra.
MacceMedlem sedan apr. 2001425 inlägg
Annars kan du ju alltid upprepa koden i dina script X antal gånger för att få längre tider och vettigare värden att jämföra.
Det gör jag ibland, men om jag vill mäta ett speciellt script kan jag
använda Microsoft Web Application Stress Tool, fast jag har inte satt mig in i det programmet.
Tycker att Timer() annars är ganska smidigt att includera (svängelska) på sidorna.
Eftersom att jag får svaret 0ms ibland så borde väl mitt skript gå
så fort att det inte går att mäta, och de andra tiderna beror på
mitt system.
eller ?
Mvh
Engine^Medlem sedan dec. 20003 887 inlägg Jag är inte helt hundra på att det är följande du är på jakt efter men
Private Declare Function timeGetTime Lib "winmm.dll" () As Long
dim lngStart As Long, lngTid As Long
lngStart = timeGetTime
kördittskriptfortsomfanken()
lngTid = timeGetTime - lngStart ' lngTid = tiden det tog i millisekunder.
Något i den stilen?
nikoMedlem sedan juni 20022 599 inlägg
Eftersom att jag får svaret 0ms ibland så borde väl mitt skript gå
så fort att det inte går att mäta, och de andra tiderna beror på
mitt system.
Ja. Som sagt, ju kortare script du kör, desto större andel av tiden kommer att bero på slumpeffekter av vad Windows har för sig i övrigt.
Sen är det ju så att Timer() bara har sju siffrors precision. Pga detta och avrundningsfel så kan du alltså mycket väl få 0 för kortare script.
Källa: http://www.devguru.com/Technologies/vbscript/quickref/timer.html
MacceMedlem sedan apr. 2001425 inlägg Engine^> Hur kör man din kod i VbScript ?
Engine^Medlem sedan dec. 20003 887 inlägg Du sätter deklarationen så att den är global. Det borde räcka...
MacceMedlem sedan apr. 2001425 inlägg Kan du ge mig ett exempel som du provkört i VbScript ?
Engine^Medlem sedan dec. 20003 887 inlägg Opps... undrar om jag har råkat tänka VB nu och inte VBS... ber om ursäkt isånnafall.
nikoMedlem sedan juni 20022 599 inlägg
Engine^> Hur kör man din kod i VbScript ?
Det gör man inte. Man får kapsla in den i en COM-komponent. Och om nån nu skulle ha lust att göra det så kan de också passa på att slänga in:
Public Declare Function GetThreadTimes Lib "kernel32" ..
Den returnerar exekveringstiden enbart för den egna tråden (bortser från övriga Windows), vilket kunde vara intressant som jämförelse. Den har dessutom grym precision (mäter i 100-nano-sekundsintervaller :o ).
MacceMedlem sedan apr. 2001425 inlägg hmm, ingen som vill glänsa lite och fixa till en liten COM-komponent ? :e
mvh
OveRRidEMedlem sedan feb. 200112 078 inlägg Fast frågan är ju hur pass rättvisande det blir om man kör det i en komponent, då den troligtvis snor lite tid som även det påverkar resultatet. :)
MacceMedlem sedan apr. 2001425 inlägg Får köra den utan någon kod mellan start och stopp, och sen räkna bort den tiden. hehe §e
Engine^Medlem sedan dec. 20003 887 inlägg Summa summarum: det går inte att veta tiden en specifik komponent förbrukar i en Micro$oft-miljö, eftersom Bill Gates alltid tar en viss procent av det skapande eller skapade. :OO
MacceMedlem sedan apr. 2001425 inlägg Jag kräver inte en noggrannhet på 100nS bara ett mer
rättvisande värde än +- 20ms :stud
mvh
VideMedlem sedan dec. 19998 577 inlägg
Macce skrev:
hmm, ingen som vill glänsa lite och fixa till en liten COM-komponent ? :e
Mjo, jag lekte ihop en liten en... ;)
http://member.webforum.nu/14/webeye.dll
Set oTimer = server.CreateObject( "webeye.TimerClass" )
oTimer.StartTimer
'Kör din kod
oTimer.StopTimer
Response.Write "Tid: " & oTimer.GetTimer() & " ms"
Mvh, Vide
MacceMedlem sedan apr. 2001425 inlägg Vide> Stark kandidat till årets medlem :birp
Får nu 10ms i 19 fall av 20...
Verkar fungera bättre än timer i a f....
Tusen tack !!!
nikoMedlem sedan juni 20022 599 inlägg
OveRRidE skrev:
Fast frågan är ju hur pass rättvisande det blir om man kör det i en komponent, då den troligtvis snor lite tid som även det påverkar resultatet.
Jag skulle nog påstå att ett par API-anrop och en subraktion är väldigt försumbara i sammanhang där vi mäter exekveringstid hos VBScript. Tiden för att initialisera komponenten kommer ju så klart inte att ingå i differensen.
Vide>> Fuskis. Du använder bara timeGetTime, eller hur? ;)
Engine^Medlem sedan dec. 20003 887 inlägg Vide: Vilken funktion använde du dig av för att få tiden?