Fondamentalmente hai bisogno di tanto spazio per i tuoi numeri perché stai usando la base 10 per rappresentarli. Un miglioramento sarebbe utilizzare la base 16 (esadecimale). Ad esempio, potresti rappresentare 255 (3 cifre) come ff (2 cifre).
si può prendere quel concetto ulteriormente utilizzando un numero molto maggiore di base ... l'insieme di tutti i caratteri che sono validi i parametri di stringa di query: ''
AZ, az, 0-9,, '- ',' ~ ',' _ ',' + '
Fornisce una base di 67 caratteri con cui lavorare (vedere Wikipedia on QueryString).
Dai un'occhiata a this SO post per gli approcci alla conversione della base 10 in basi di numeri arbitrari.
EDIT:
Nel post SO collegato, guarda questa parte:
string xx = IntToString(42,
new char[] { '0','1','2','3','4','5','6','7','8','9',
'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x'});
che è quasi quello che ti serve. Basta ampliata con l'aggiunta di pochi personaggi che manca:
yz.- ~ _ +
Questo post è manca un metodo per tornare alla base 10. Non ho intenzione di scriverlo :-) ma la procedura è la seguente:
Definire un contatore che chiamerò TOTALE.
Guarda il a destra gran parte dei caratteri e trova la sua posizione nell'array.
TOTAL = (la posizione del carattere nell'array) Esempio: l'ingresso è BA1. TOTAL ora è 1 (poiché "1" è nella posizione 1 nell'array)
Ora guarda il prossimo carattere a sinistra del primo e trova la sua posizione nell'array. TOTAL + = 47 * (la posizione del carattere nell'array) Esempio: l'ingresso è BA1. TOTAL è ora (47 * 11) + 1 = 518
Ora guarda il prossimo carattere a sinistra del precedente e trova la sua posizione nell'array. TOTAL + = 47 * 47 * (la posizione del carattere nell'array) Esempio: l'ingresso è BA1. Totale è ora (47 * 47 * 10) + (47 * 11) + 1 = 243508
E così via.
Suggerisco di scrivere un test unitario che converta un gruppo di numeri di base 10 nella base 47 e quindi di nuovo indietro per assicurarsi che il codice di conversione funzioni correttamente.
Nota come si rappresentava un 6 cifre numero di base 10 in soli 3 cifre di base di 47 :-)
E quali sono le portate che possono avere quei numeri? Sono utilizzate tutte le cifre (0-9) e le cifre 2-8 sono sempre 0? –
Non è una risposta - ma la soluzione deve considerare la logica alla base della compressione? Se è incluso molto nelle pagine generate, la risposta è quasi certamente quella di usare la compressione gzip che comprimerà questo (e tutto l'HTML) per te con prestazioni migliori rispetto alla micro-compressione gestita attraverso questo. Se è necessario aumentare la velocità per gli utenti che inseriscono l'URL, la risposta dovrà essere presa in considerazione. – Pool
> Sono utilizzate tutte le cifre (0-9) e le cifre 2-8 sono sempre 0? NO > Se è incluso molto nelle pagine generate, la risposta è quasi certamente usare gzip Tutti i link sulla pagina di riferimento avranno href come "MyServer.com/ShowSomething.aspx?IDs=1000000012,1000000021,1000000013,1000000022&. .. "Il problema è comprimere gli ID paramtere – Dave