VB.net hur lägger jag till en progressbar till detta

Elektronik- och mekanikrelaterad mjukvara/litteratur. (T.ex schema-CAD, simulering, böcker, manualer mm. OS-problem hör inte hit!)
Horatius
Inlägg: 216
Blev medlem: 5 augusti 2008, 01:00:01
Ort: Kisa

Re: VB.net hur lägger jag till en progressbar till detta

Inlägg av Horatius »

mri skrev:OK, med reservation för att jag egentligen inte kan BASIC, men det här blir antagligen inte rätt:

Kod: Markera allt

ProgressBar1.Value = (pos / FS.Length) * 100
Eftersom pos och FS.Length är heltal skall uttrycket skrivas:

Kod: Markera allt

ProgressBar1.Value = (pos * 100) / FS.Length
Jo det blir rätt eftersom VB gör en flyttalskonvertering av heltal i samband med division, åtminstone blir kvoten ett flyttal. Det är först när värdet på ProgressBar1.Value ( som är av typepen Integer)
tilldelas som den avrundas till heltal. Jag trodde i ärlighetens namn att den skulle trunkera, men det spelar inte så stor roll i sammanhanget.

Din variant fungerar också men blir ganska långsam då VB måste dividera större tal. Gör en testkörning så ser du förmodligen en ganska drastisk skillnad med en större fil. pos förväntas uppnå samma värde som filens längd.

Jag kan dock inte heller VB.NET särskillt bra då jag numera kodar i C#.
Horatius
Inlägg: 216
Blev medlem: 5 augusti 2008, 01:00:01
Ort: Kisa

Re: VB.net hur lägger jag till en progressbar till detta

Inlägg av Horatius »

gOry skrev:
Några tips på hur man kan göra räknaren snabbare?
Jag testade den i en virtuell maskin och körde igenom en 500MB fil på 11.5 sekunder. I tanke på att du stegar igenom varenda byte så tycker jag att den går ganska snabbt.
Statusuppdateringen lade till cirka 1 sekund. Det var ingen mätbar skillnad mellan min och mris metod. Du kan tjäna en halvsekund på att inte göra beräkningen och statusuppdateringen
vid varje iteration i huvudloopen. Du kan också tjäna någon halvsekund på att ackumulera pos i huvudloopen istället med: pos = pos + Count - 1.
Användarvisningsbild
gOry
Inlägg: 5073
Blev medlem: 6 juni 2003, 22:41:25
Ort: Stockholm
Kontakt:

Re: VB.net hur lägger jag till en progressbar till detta

Inlägg av gOry »

Horatius: Ja den verkar prestera bättre än tidigare program jag använt :tumupp:
Körde igenom en lita på sammanlagt 10GB filer, ca 15 sekunder snabbare än tidigare program jag använt.

En liten bild på hur de kan se ut.
sfv.png
Finns väl egentligen ingen anledning till varför jag satt ihop detta, enbart för att lära mig lite mer om vb.net.
Ev. så kommer jag använda delar av programmet till ett annat projekt.
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Horatius
Inlägg: 216
Blev medlem: 5 augusti 2008, 01:00:01
Ort: Kisa

Re: VB.net hur lägger jag till en progressbar till detta

Inlägg av Horatius »

Grattis! Grässnittet ser trevligt ut också.
Användarvisningsbild
mri
Inlägg: 1165
Blev medlem: 15 mars 2007, 13:20:50
Ort: Jakobstad, Finland
Kontakt:

Re: VB.net hur lägger jag till en progressbar till detta

Inlägg av mri »

Några tips på hur man kan göra räknaren snabbare?
Bara som kuriosa; Jag kom att tänka på CRC16 algoritmen som jag för länge sedan optimerade i assembler för Intel Pentium:

Kod: Markera allt

  eax = initial crc value (also contains resulting crc after loop)
  esi = pointer to input buffer
  ecx = len

  xor  edx, edx            ; edx = 0
  mov  dl, [esi]           ; edx = *p
  inc  esi                 ; p++   
  xor  dl, al              ; edx = (*p ^ crc) & 0xff
inner:
  shr  eax, 8              ; eax = (crc >> 8)
  mov  ebx, [lut + edx*4]  ; ebx = lut[ (*p ^ crc) & 0xff ]
  mov  dl, [esi]           ; edx = *p
  xor  eax, ebx            ; eax = (crc >> 8) ^ lut[ ... ]
  inc  esi                 ; p++
  xor  dl, al              ; edx = (*p ^ crc) & 0xff
  dec  ecx                 ; --len
  jnz  inner
'lut' är uppslagstabellen motsvarande 'CRC32Table' i BASIC koden.
Inner-loopen borde teoretiskt exekvera på 4 klockcykler per input byte, om man bortser från eventuella cache-missar. Hur den beter sig på modernare CPU'er vågar jag inte uttala mig om.
Skriv svar