Making makroer kjøre raskere, Take Two

March 14  by Eliza

Forrige ukes tips om å lage makroer kjøre raskere ble møtt med en god del kommentarer, spørsmål og begrensninger ved WordTips lesere. Noen lesere aner teknikken beskrevet - å sette flere utsagn på samme linje og skille dem med kolon - som noe som ofte ble gjort i eldre versjoner av BASIC programmeringsspråk. Flere lesere har også bedt om ytterligere informasjon om teknikk og hvordan den gjennomføres "bak kulissene" i VBA. (Selv om dette makro refererer spesifikt til VBA, begrepene det diskuterer og teknikkene som følge derfra er også aktuelt for Wordbasic makroer.)

Når du oppretter en makro i VBA, er den «pseudocompiled" eller "symbolbaserte" når du lagre makroen eller når du lagre malen der makroen er lagret. I stedet for den lesbar form som er synlig i VBA Editor, er hvert søkeord eller direktiv konvertert internt til en tre-byte "token" som er lett behandles av VBA. Variabelnavn, kommentarer og bokstavestrengverdier - noe som er søkeord eller direktiver - blir ikke endret og blir frelst "som den er". Selv om VBA tokenizes søkeord og direktiver, betyr det ikke "komprimere" noen av linjene i makro; hver linje blir opprettholdt som den er, med vognretur ved slutten av linjen intakt.

Når makro utføres, VBA prosessoren henter en enkelt linje av makroen gangen. Symbolene på linjen tolkes og henrettet, i den rekkefølgen de vises på linjen. Når en linje er avsluttet, er den neste linje hentet og utført, og så videre, ved utløpet av makro. Når du kombinerer flere utsagn på én enkelt linje og skille dem med kolon, er ideen å redusere antall hente sykluser at prosessoren må gå gjennom. Det er der den speedup kommer inn i bildet; mindre henting betyr mindre tid brukt på å gjøre "overhead" og mer tidsbruk faktisk kjøre makroen selv.

Det burde være åpenbart at når du kombinerer uttalelser på en enkelt linje, kan den resulterende makro være mye vanskeligere for deg, som et menneske, å lese. Dermed blir "optimalisere" eller "ikke optimalisere" Beslutningen innebærer en avveining - vanskeligere å lese koden vs. raskere kode. Det har vært den samme måten siden de tidlige dagene av BASIC, lenge før ordet ble selv drømt om.

Du bør forstå at spart tid ved å kombinere uttalelser på en enkelt linje er minimale, spesielt med dagens raske datamaskiner. Dermed gjør det ikke mye mening å kombinere uttalelser der den delen av koden vil kjøres bare én gang. De virkelige innsparingene kommer inn i bildet hvis koden vil bli gjentatt hundrevis eller tusenvis av ganger i løpet av makroen. Tidsbesparelser realisert fra hver iterasjon av koden kan være liten, men den kumulative tidsbesparelser kan være ganske attraktivt.

Hvis du bestemmer deg for å "komprimere" koden din ved å kombinere flere utsagn og søkeord på én linje, er det et par ting å huske på. Først av alt, er den maksimale linjelengden 255 tegn. Dessuten må under uttalelser, som brukes til å starte makroer, vises på egen linje, som må med og slutte med uttalelser. (I Wordbasic kan du sette sammen under uttalelse med andre uttalelser, men hvis du senere konvertere makroen til VBA, må du manuelt bryte linjen i to.)

Gløgg lesere sannsynligvis plukket opp en annen idé av den informasjonen som presenteres tidligere i dette tipset. Siden "pseudocompiler" ikke komprimerer variabelnavn, konstanter, eller kommentarer, kan du litt fart på makro ved å redusere lengden på variabelnavn, bruk av konstanter, og bruk av kommentarer. Igjen, er kompromisset av et slikt vedtak i lesbarhet. Kortere variabelnavn når du vedlikeholder makro på et senere tidspunkt, er mer kryptisk, og en mangel på kommentarer kan virke mot sin hensikt. Dermed må du være dommer på om kompromisset er verdt det.

Det er en annen interessant ting å merke seg - hvis du gjør noen sammensetning av linjer i dine makroer, vil du åpenbart ønsker å gjøre noen tester for å være sikker på at de fortsatt jobber som du har tenkt. Som du er stepping gjennom makroer (i VBA Editor), legge merke til at Step kommandoen (F8) Into fortsatt bare utfører en setning om gangen, ikke en hel linje av gangen. Denne oppførselen er spesifikt for den interaktive utviklingsmiljø, og gjenspeiler ikke hvordan VBA-motoren oppfører seg når makroen kjører full fart. På kjøre-tid, er makro gjennomføres som beskrevet ovenfor - en komplett linje av gangen.

WordTips er din kilde for kostnadseffektiv Microsoft Word trening. (Microsoft Word er den mest populære tekstbehandlingsprogrammet i verden.) Dette tipset (1644) gjelder for Microsoft Word 97, 2000, 2002, og 2003.