带文件的C#内存不足

时间:2017-09-18 20:25:21

标签: c# .net

我在运行以下代码时遇到OutOfMemory异常,它发生在File.ReadLines行上,它会处理大多数文件,直到它遇到更大的文件。

它在整个过程中一直使用大量内存和cpu。

它崩溃的文件只有156,000KB,即156mb

static void Main(string[] args)
{
    Console.CursorVisible = false;

    Console.ForegroundColor = ConsoleColor.Green;
    Console.WriteLine();
    Console.WriteLine("  [" + DateTime.Now.ToShortTimeString() + "]" + " Connected to the Cassandra Database");
    Console.WriteLine();
    Console.ForegroundColor = ConsoleColor.White;

    string filepath = @"C:\Users\admin\Desktop\wecrack lists";
    DirectoryInfo directory = new DirectoryInfo(filepath);

    int fileCount = 0;

    var client = new MongoClient("mongodb://localhost:27017");
    var database = client.GetDatabase("cracking");
    var collection = database.GetCollection<Password>("passwords");

    foreach (var file in directory.GetFiles("*"))
    {
        fileCount++;

        Console.WriteLine("  [" + DateTime.Now.ToShortTimeString() + "]" + " Working through file: {" + file + "} {" + fileCount + "/" + directory.GetFiles("*").Count() + "}");

        List<Password> entitys = new List<Password>();

        foreach (string line in File.ReadLines(filepath + @"\" + file.ToString()))
        {
            entitys.Add(new Password { password = line });
        }

        collection.InsertManyAsync(entitys);
    }

    Console.WriteLine();
    Console.WriteLine("  [" + DateTime.Now.ToShortTimeString() + "]" + " Finished inserting records, press any key to get the count.");
    Console.ReadKey(true);

    while (true)
    {
        Console.ReadKey(true);
    }
}

1 个答案:

答案 0 :(得分:1)

尝试批量处理您的更新。这样你就不会同时拥有内存中的所有数据。它也可以帮助您完全锁定数据库。

{{1}}