我有一个字符串列表,其中包含大小为152MB的文本文件中的大约700万个项目.我想知道什么是实现一个函数的最佳方法,该函数接受一个字符串并返回它是否在该字符串列表中.
我有4GB +文本文件(csv格式),我想在c#中使用linq处理这个文件.
我在加载csv后运行复杂的linq查询并转换为类?
但是文件大小是4GB,尽管应用程序内存是文件的双倍大小.
我如何处理(linq和新结果)大文件?
谢谢
我有一个大文件(60mb),我正在将文件读入一个字符串,然后我将该字符串返回给另一个方法.
现在,当我将文件读入字符串时,它给出系统内存不足的异常.
有没有办法读取部分文件并将其附加到字符串?如果没有办法解决这个问题?
static public string Serialize()
{
string returnValue;
System.IO.FileInfo file1 = new FileInfo(@"c:\file.txt");
returnValue = System.IO.File.ReadAllText(file1.ToString());
}
Run Code Online (Sandbox Code Playgroud) 我正在构建一个通过比较哈希来扫描文件的应用程序。我需要搜索超过 1GB 的哈希值来获取文件的哈希值。我为此找到了其他解决方案,例如 Aho-Corasick,但它比File.ReadLines(file).Contains(str).
这是迄今为止最快的代码,使用File.ReadLines. 扫描一个文件大约需要 8 秒,而使用 Aho-Corasick 扫描一个文件大约需要 2 分钟。由于显而易见的原因,我无法将整个哈希文件读入内存。
IEnumerable<DirectoryInfo> directories = new DirectoryInfo(scanPath).EnumerateDirectories();
IEnumerable<FileInfo> files = new DirectoryInfo(scanPath).EnumerateFiles();
FileInfo hashes = new FileInfo(hashPath);
await Task.Run(() =>
{
IEnumerable<string> lines = File.ReadLines(hashes.FullName);
foreach (FileInfo file in files) {
if (!AuthenticodeTools.IsTrusted(file.FullName))
{
string hash = getHash(file.FullName);
if (lines.Contains(hash)) flaggedFiles.Add(file.FullName);
}
filesScanned += 1;
}
});
foreach (DirectoryInfo directory in directories)
{
await scan(directory.FullName, hashPath);
directoriesScanned += 1;
}
Run Code Online (Sandbox Code Playgroud)
编辑:根据请求,以下是文件内容的示例:
5c269c9ec0255bbd9f4e20420233b1a7
63510b1eea36a23b3520e2b39c35ef4e
0955924ebc1876f0b849b3b9e45ed49d
Run Code Online (Sandbox Code Playgroud)
它们是 …
c# ×4
string ×2
.net ×1
.net-4.0 ×1
c#-4.0 ×1
large-files ×1
matching ×1
performance ×1
search ×1
text ×1