は、あなたの質問や、コードの私の分析である(コメントを読む)
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;
}
}
仮定のすべての種類を作り、以下の私は長い文字列を分割するために推薦するコードです。それは、あなたがサンプルでやっていることをするための単なるクリーンな方法です。これを最適化することはできますが、探している速度を確認することはできません。
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;
}
私のバージョンではパフォーマンステストを行っていませんが、あなたのバージョンよりも速いと思います。
また、出力をどのように使用するかはわかりませんが、I/Oを実行するときの最適化は非同期呼び出しを使用することです。大取り扱うときや(読みやすさと複雑さのコストで)良い最適化がstring
は
'String.Sの
StringReader
クラスを使用する必要がありますplitは1つのオプションになる可能性があります –これは役立つかもしれません:http://stackoverflow.com/questions/568968/does-any-one-know-of-a-faster-method-to-do-string-split – MusicLovingIndianGirl
私たちは、スプリットを使用する特定の文字を持って、ちょうどサイズ(文字数)に基づいて文字列を分離する必要があります –