ホームページ >バックエンド開発 >C++ >.NET で 1GB のテキスト ファイルを効率的に読み取るにはどうすればよいですか?

.NET で 1GB のテキスト ファイルを効率的に読み取るにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-04 19:26:42382ブラウズ

How to Efficiently Read a 1GB Text File in .NET?

.NET で大容量のテキスト ファイル (1 GB) を読み取る方法

大容量のテキスト ファイルに効率的にアクセスすることは、データ処理において重要なタスクですそして分析。 .NET では、MemoryMappedFile や StreamReader.ReadLine など、大規模なテキスト ファイルを読み取るための手法がいくつかあります。

MemoryMappedFile

.NET 4.0 以降では、MemoryMappedFile は最適化された大きなファイルの読み取りパフォーマンス。メモリマップされたファイルを作成し、中間バッファリングなしでファイルに直接メモリアクセスできるようにします。これにより、複数のディスク読み取りの必要性がなくなり、パフォーマンスが大幅に向上します。

MemoryMappedFile を使用するには:

using System.IO.MemoryMappedFiles;

public static void ReadTxtFileUsingMemoryMappedFile()
{
    string filePath = string.Empty;
    // Get file path from user or other source
    using (MemoryMappedFile mmf = MemoryMappedFile.CreateFromFile(filePath))
    {
        byte[] buffer = new byte[mmf.Capacity];
        mmf.CreateViewAccessor().ReadArray(0, buffer, 0, buffer.Length);
        string data = System.Text.Encoding.UTF8.GetString(buffer);
        // Parse or process the data
    }
}

StreamReader.ReadLine

.NET 4.0 を使用していない場合、またはより単純なアプローチを希望する場合は、StreamReader.ReadLine を利用できます。このメソッドは、ファイルからテキスト行を読み取り、それを文字列として返します。 MemoryMappedFile よりも遅い場合がありますが、簡単で信頼性の高いオプションです。

StreamReader.ReadLine を使用するには:

using System.IO;

public static void ReadTxtFileUsingStreamReader()
{
    string filePath = string.Empty;
    // Get file path from user or other source
    using (StreamReader sr = new StreamReader(filePath))
    {
        string line;
        while ((line = sr.ReadLine()) != null)
        {
            // Parse or process the line
        }
    }
}

最適なアプローチの選択は、特定の要件によって異なります。パフォーマンスが重要であり、.NET 4.0 を使用している場合は、MemoryMappedFile を強くお勧めします。それ以外の場合、StreamReader.ReadLine は、大量のテキスト ファイルを読み取るためのシンプルで信頼性の高いソリューションを提供します。

以上が.NET で 1GB のテキスト ファイルを効率的に読み取るにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。