質問
あかかわらず、全てのプログラム数を確認のライン内のテキストファイルとは何ですか?
解決
真剣に私の編集:います。純4.0以降
の File
クラスの新しい ReadLines
法による遅延列挙行ではなくぼみ表示することを目的としています。配列のように ReadAllLines
.それでい効率で簡潔:
var lineCount = File.ReadLines(@"C:\file.txt").Count();
独自の回答
いつも気に効率化できるだけ書き:
var lineCount = File.ReadAllLines(@"C:\file.txt").Length;
より効率的な方法はなにができる:
var lineCount = 0;
using (var reader = File.OpenText(@"C:\file.txt"))
{
while (reader.ReadLine() != null)
{
lineCount++;
}
}
編集:寄せられた質問に答える内容で約効率化
その理由を言ったの効率化したのに関するメモリの使用、必ずしも高速になります。の負荷の全コンテンツのファイルを配列する手段とな配分とは少なくともメモリとしてのサイズのファイルです。第単にループ一線で向かいということはありませんが割以上の線分のメモリです。このことはできないので重要なのために小さなファイルが大きいファイルでき課題(しようとした場合の回線数は、4GBのファイル32ビットのシステムは、例えば、が簡単なユーザーモードのアドレス空間配分の配列をここでおります。
の速度かあると思することができます。まれてくる可能性があることでReadAllLinesは内部optimisationsが、他方その場合の配分の大規模なチャンクのメモリを消費します。いらっしゃるかと思いるReadAllLinesり速いために小さなファイルが大幅に鈍化のための大きなファイルそういう測定でストップウォッチまたはコードプロファイラ.
他のヒント
最も簡単な:
int lines = File.ReadAllLines("myfile").Length;
このメモリ使用量を少なくできなかったが、おそらくな
int count = 0;
string line;
TextReader reader = new StreamReader("file.txt");
while ((line = reader.ReadLine()) != null)
{
count++;
}
reader.Close();
場合によく使うコードや解読が万一効率の悪い?
string[] lines = System.IO.File.RealAllLines($filename);
int cnt = lines.Count();
ことになる頼りになり、辛抱強い方がわからないのか。
きものだと(場合によってはバッファリングで)
#for large files
while (...reads into buffer){
string[] lines = Regex.Split(buffer,System.Enviorment.NewLine);
}
他にもさまざまな方法で実現できるものは何だけます。
までもすぐにわかるように読んで、値がカウンターでの利用ループの増分は、何ものです。
カウントの運送を返します/ラインを配信します。と思いunicodeい0x000Dと0x000Aます。そのようにでき、効率的又は効率が悪いと決めた場合においても文字ではない
実行可能なオプションは、私個人として使用する追加ヘッダの最初の行はファイルです。またこのためのカスタムモデル形式で自分のゲームです。基本的には、ツールを最適化するmy.objファイルからの脱却のナメんが、必要な変換を行い、より良いレイアウトを書き込みの合計数のラインは、以下の二つの条件を考慮,頂点、質感UVsのものがあります。)そのデータはその使用により様々な配列をバッファの場合のモデルであるとみなされます。
こもるので便利でするために必要なループを通じて、ファイルを一度に負荷では、一度カウントのライン、再データを読み込作成したバッファ.
ファイル読み込みにより時間がかかり、ごみ収集の結果は別の問題として書の記載事項をよく読んでファイル全体をカウントには改行文字(s)
ある時点では、誰がして読める文字のファイルに関わらず、この枠組みの場合はそのコードです。このファイルを開きがあるように、人間だれにでもメモリの場合はファイルが大きいことが潜在的に問題になるメモリが必要ゴミを収集します。
この解決策を提案で4文字を読み込み時にカウントの改行文字および再使用、同じメモリアドレスを再び次の文字と比較しました。
private const char CR = '\r';
private const char LF = '\n';
private const char NULL = (char)0;
public static long CountLinesMaybe(Stream stream)
{
Ensure.NotNull(stream, nameof(stream));
var lineCount = 0L;
var byteBuffer = new byte[1024 * 1024];
const int BytesAtTheTime = 4;
var detectedEOL = NULL;
var currentChar = NULL;
int bytesRead;
while ((bytesRead = stream.Read(byteBuffer, 0, byteBuffer.Length)) > 0)
{
var i = 0;
for (; i <= bytesRead - BytesAtTheTime; i += BytesAtTheTime)
{
currentChar = (char)byteBuffer[i];
if (detectedEOL != NULL)
{
if (currentChar == detectedEOL) { lineCount++; }
currentChar = (char)byteBuffer[i + 1];
if (currentChar == detectedEOL) { lineCount++; }
currentChar = (char)byteBuffer[i + 2];
if (currentChar == detectedEOL) { lineCount++; }
currentChar = (char)byteBuffer[i + 3];
if (currentChar == detectedEOL) { lineCount++; }
}
else
{
if (currentChar == LF || currentChar == CR)
{
detectedEOL = currentChar;
lineCount++;
}
i -= BytesAtTheTime - 1;
}
}
for (; i < bytesRead; i++)
{
currentChar = (char)byteBuffer[i];
if (detectedEOL != NULL)
{
if (currentChar == detectedEOL) { lineCount++; }
}
else
{
if (currentChar == LF || currentChar == CR)
{
detectedEOL = currentChar;
lineCount++;
}
}
}
}
if (currentChar != LF && currentChar != CR && currentChar != NULL)
{
lineCount++;
}
return lineCount;
}
上記できるラインを読み一文字としては、基になる枠組みお客様のご要望に応じて読みの文字をすべてのラインで食事をします。
場合はプロとして行われ湾仁摩きだということはかなり高速で効率の良い方法を行っています。
try {
string path = args[0];
FileStream fh = new FileStream(path, FileMode.Open, FileAccess.Read);
int i;
string s = "";
while ((i = fh.ReadByte()) != -1)
s = s + (char)i;
//its for reading number of paragraphs
int count = 0;
for (int j = 0; j < s.Length - 1; j++) {
if (s.Substring(j, 1) == "\n")
count++;
}
Console.WriteLine("The total searches were :" + count);
fh.Close();
} catch(Exception ex) {
Console.WriteLine(ex.Message);
}