Qual è il modo migliore per visualizzare i file di grandi dimensioni senza l'utilizzo di grandi quantità di memoria?

StackOverflow https://stackoverflow.com/questions/694137

Domanda

Molti editor esadecimale, come Hex Workshop, può anche leggere i file di grandi dimensioni, mantenendo una parte relativamente piccola orma di memoria, ma ancora in grado di continuare a scorrere liscia. Sto cercando il modo migliore per raggiungere questo obiettivo, e quindi ho alcune domande relative.
Devo solo usare FileStream?
- E 'il suo buffer in base alla posizione corrente Seek? (Sarà di solito pagefault quando si scorre all'indietro?)
- Se creo un wrapper per FileStream che utilizza solo Seek internamente, farò del male la capacità di FileStream di buffer correttamente? (Vale a dire, saranno le prestazioni soffrire molto da ripetute seeking, anche se cerca trovano nelle vicinanze? Posso contare su l'algoritmo di buffering o lo scheduler Disk per mantenere le prestazioni fino?)
Sarebbe meglio usare I / O memory-mapped? (Ho solo davvero aspettare i file fino a 100MB forse)
- Sarebbe pagefaults dalla ricerca / salta / scorrimento veloce creare problemi di prestazioni notevoli
? In definitiva i dati devono essere visualizzati. Devo rendere l'intero file come bitmap e invalidare parti dell'immagine su modifiche (lasciando il controllo di scorrimento fare la propria paginazione sull'immagine), o devo solo generare l'area di visualizzazione corrente sugli eventi di scorrimento?
Così, in breve, devo pagina dei dati, l'immagine generata, o entrambi, o faccio a / generarli, se necessario? Quali sono le (WPF / .Net) librerie / oggetti API più adatti a questo compito?

È stato utile?

Soluzione

Sembra che tu abbia già la risposta.
La soluzione per questo sta usando file mappato in memoria e lasciare che il sistema operativo perdere tempo con il caching e la ricerca.
Prima prova la soluzione più semplice e più ovvia. Se non funziona in modo soddisfacente, ottimizzare i colli di bottiglia. ottimizzazioni prematura è la radice di tutti i mali.

Altri suggerimenti

100MB non è poi così grande. Quindi, in memoria probabilmente lavorare su nuove macchine.

Ma non si vuole la soluzione per non scala col passare del tempo. Nel momento in cui si assume il limite è di 100 MB qualcuno proverà con 200MB. Quindi vi consiglio di fare prendere la "cercano" route -. Che è il modo comune per farlo

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top