Har gjort lite tester och kommit fram till att datatypen Long är snabbare i beräkningarna än Integer(16) (VBS).
Anledningen är antagligen att systemet (Processorn) bygger på 32 bitar. Integer(16) är segare p.g.a att systemet måste skala ned ifrån 32, d.v.s, det sker en konvertering.
Dock är Cint snabbare på att konvertera gentemot Clng.
<%
intTimer = Timer()
int1 = cint( "0" )
for i = 0 to 500000
int1 = ( 1 + int1 ) mod 32768
next
response.write "int: " & Timer() - intTimer & "<br><br>"
intTimer2 = Timer()
lng1 = clng( "0" )
for i = 0 to 500000
lng1 = ( 1 + lng1 ) mod 32768
next
response.write "lng: " & Timer() - intTimer2 & "<br><br>"
%>
Slutsats? Hypotesen kanske bör provas i en mängd olika operativ, maskinkonfigurationer, dll-versioner innan man drar nån slutsats?
Man kanske också bör prova med mängder olika sorts kod?
Och ja, jag lovar. Jag har en 32-bitars processor!
Jag har visserligen hört att long skall vara bättre att använda i VB än integer, av nämnda anledningar, men en sak jag har lärt mig är att saker och ting skiljer ganska väsentligt mellan VB och VBScript.
(I .NET är dock integer en 32-bitars datatyp, och long har blivit 64 bitar, hur blir det då? ;) )
Men nu kommer det intressanta! Om jag byter plats på looparna så får jag tvärtom:
[snip!]
Slutsats?
Process-schemaläggaren effektiviserar schemat när den upptäcker att din ASP-sida vill göra en massa dumberäkningar.
Och ja, det här är implementationsspecifikt. En 16-bitars datatyp kan mycket väl ta upp 32 bitar för att processorn ska kunna bearbeta den effektivare. (Om det faktiskt är så i någon {VB,VBScript}implementation vet jag förstås inte :) )
Process-schemaläggaren effektiviserar schemat när den upptäcker att din ASP-sida vill göra en massa dumberäkningar.
Men i så fall borde den ju upptäcka det redan tidigt i första loopen? Och ordningsföljden skulle spela mindre roll.
Dessutom tror jag inte att schemaläggaren (Windows dispatcher) har några synpunkter på vad enskilda trådar håller på med, eller ens försöker lägga sig i och optimera. Windows funkar inte riktigt så ..
spango skrev:
Om det faktiskt är så i någon {VB,VBScript}implementation vet jag förstås inte
Nej, det funkar inte alls så. I VBScript finns inga 16-bitars integer eller 32-bitars long. Det finns bara en datatyp: Variant. En variant är alltid 16 bytes(!).
Alla VBScriptfunktioner returnerar Varianter, även CLng och CInt.
De två första bytesen i en Variant talar om hur datan i de övriga 14 ska tolkas (exakt hur det funkar vet bara gud och MS). Därför blir resonemang kring snabbheten hos 16- och 32-bitarsoperationer i VBScript lite odefinierade och konstiga.