Qui di seguito è la mia analisi della tua domanda e il codice (leggere i commenti)
using (StreamReader srSegmentData = new StreamReader(fileNamePath))
{
string strSegmentData = "";
string line = srSegmentData.ReadToEnd(); // Why are you reading this till the end if it is such a long string?
int startPos = 0;
ArrayList alSegments = new ArrayList(); // Better choice would be to use List<string>
while (startPos < line.Length && (line.Length - startPos) >= segmentSize)
{
strSegmentData = strSegmentData + line.Substring(startPos, segmentSize) + Environment.NewLine; // Seem like you are inserting linebreaks at specified interval in your original string. Is that what you want?
alSegments.Add(line.Substring(startPos, segmentSize) + Environment.NewLine); // Why are you recalculating the Substring? Why are you appending the newline if the aim is to just "split"
startPos = startPos + segmentSize;
}
}
Rendere tutti i tipi di assunzione, sotto è il codice mi sento di raccomandare per la scissione lunga serie. È solo un modo pulito di fare ciò che stai facendo nell'esempio. Puoi ottimizzarlo, ma non sei sicuro di quanto velocemente stai cercando.
static void Main(string[] args) {
string fileNamePath = "ConsoleApplication1.pdb";
var segmentSize = 32;
var op = ReadSplit(fileNamePath, segmentSize);
var joinedSTring = string.Join(Environment.NewLine, op);
}
static List<string> ReadSplit(string filePath, int segmentSize) {
var splitOutput = new List<string>();
using (var file = new StreamReader(filePath, Encoding.UTF8, true, 8 * 1024)) {
char []buffer = new char[segmentSize];
while (!file.EndOfStream) {
int n = file.ReadBlock(buffer, 0, segmentSize);
splitOutput.Add(new string(buffer, 0, n));
}
}
return splitOutput;
}
Non ho eseguito alcun test delle prestazioni sulla mia versione, ma suppongo che sia più veloce della versione.
Inoltre, non sono sicuro di come si prevede di consumare l'output, ma una buona ottimizzazione quando si esegue l'I/O è di utilizzare le chiamate asincrone.E una buona ottimizzazione (a costo di leggibilità e complessità) durante la manipolazione di grandi dimensioni string
è quello di attaccare con char[]
Nota che
- si potrebbe avere a che fare con problemi di codifica dei caratteri durante la lettura del file di
- Se hai già la lunga stringa in memoria e la lettura dei file è stata inclusa nella demo, dovresti utilizzare la classe
StringReader
invece della classe StreamReader
'String.S. plit' potrebbe essere un'opzione –
Questo potrebbe aiutare: http://stackoverflow.com/questions/568968/does-any-one-know-of-a-faster-method-to-do-string-split – MusicLovingIndianGirl
noi don ' Ho un carattere specifico per usare Split, devi solo separare la stringa in base alla dimensione (numero di caratteri) –