Oppure

Loading
29/12/10 22:30
muteblaster
salve ragazzi:
ho una domanda che puo' sembrare banale, ma vorrei vedere se esiste unaltra soluzione rispetto alla mia....
ho un array di byte per fare la assegnazione devo per forza usare un ciclo for oppure esiste un altro metodo magari basato su qualche api che non conosco?
aaa
30/12/10 14:00
GrG
penso dipenda da ciò che vuoi fare, ma generalmente ci vuole sempre un ciclo
aaa
31/12/10 15:55
Se trovi il modo di accedere al DMI (non so come si faccia in vb6) poichè l'array è una serie di allocazionivdi memoria CONTIGUE potresti sparare un valore su tutte le locazioni.
Questo è 1000 volte più veloce di un for che scorre l'intero array

Ma questo vale solo se devi assegnare lo stesso valore ad ogni locazione dell'array ad esempio un array tutto di "0".

In C++ essendo molto più a basso livello esiste l'istruzione memset che si occupa di accedere al DMI.

In VB6 non so se sia possibile prova a fare una ricerca....

01/01/11 7:47
muteblaster
ho implementato un programmino per cifrare i file , ed ho avuto un notevole implemento di velocita' caricando , con l'istruzione redim, il file in porzioni su array di byte....
pero' per cifrare un array di byte devo eseguire un ciclo for per ogni singolo byte, se magari esiste qualcosa di piu' veloce che mi permetta di prendere un array di byte criptarlo e metterlo in un altro array di byte.......

girando su internet ho trovato l'uso delle api FillMemory ma non riesco a fare una assegnazione ......
praticamente vorrei riuscire a a cifrare un blocco di byte senza dover fare una assegnazione con il ciclo for.......

Ultima modifica effettuata da muteblaster 01/01/11 7:49
aaa
01/01/11 15:48
Se devi copiare un array in un altro (che però deve essere dello stesso tipo es INTERO) puoi usare la funzione che in C si chiama memcpy, ma è presente anhe nelle API di windows sotto il nome di CopyMemory.

Sebbene io non abbia mai usato CopyMemory credo sia più o meno la stessa cosa di memcpy.

memcopy funziona così:
DEVI PASSARGLI
-Locazione di memoria da dove iniziare la copia
-Numero di byte da copiare
-Locazione di memoria dove incollare i byte copiati.

E' 1000 volte più veloce di un for perchè non usa istruzioni del processore ma usa il DMI: una parte del processore che si occupa solo di fare questa operazione.

Fai una ricerca su google "CopyMemory vb" e vedrai che trovi quello cerchi :D
Ultima modifica effettuata da 01/01/11 15:49
04/01/11 21:31
muteblaster
sono riuscito a trovare su internet delle spiegazioni riguardanti questa api....sulla base di esse ho ricreato un esempio e' circa 100 volte piu' veloce......
il problema pero' mi si sposta.....infatti volevo man mano che assegnavo il nuovo aray eseguire la cifratura/decifratura......ma se richiamo una funzione all'interno dell'api vb mi crasha......

aaa
05/01/11 21:57
GrG
Postato originariamente da muteblaster:ma se richiamo una funzione all'interno dell'api vb mi crasha......



Qua mi sa che c'è poco da fare, mi sa che per vb è troppo...
aaa
06/01/11 6:55
muteblaster
5 mb/s credo sia il massimo che si possa fare in vb........
avevo cercato l'utilizzo dell' ASM code in vb ma e' molto complesso.....se qulcuno conoscwe qulache sito dove spieghino l'utilizzo della dll asm


aaa