小编Cen*_*ury的帖子

c#所有文件中最快的字符串搜索

问题(检查编辑是否有澄清)

我有一个大约1500个字符串的列表,对于每个字符串,我必须检查目录(和子目录)中的任何文件是否包含该字符串(大约有4000个文件).

我现在拥有的是这两种变体:

原版的

foreach(var str in stringList)
{
    allFiles.Any(f => File.ReadAllText(f).Contains(str));
}
Run Code Online (Sandbox Code Playgroud)

第二个变体(使用ReadLines而不是ReadAllText,正如VladL在这个问题中所建议的那样)

foreach(var string in stringList)
{
    allFiles.SelectMany(File.ReadLines).Any(line => line.Contains(str));
}
Run Code Online (Sandbox Code Playgroud)

我只测试了原始变体的完整程序执行,花了21分钟才完成.然后我测试了一个语句(检查任何文件中是否包含1个字符串),搜索一个我知道它不包含的字符串来检查最坏的情况,这是我的时间(每次执行3次):

原文:1285,1369,1336 ms

第二个变体:2718,2804,2831 ms

我还尝试在原始语句中用ReadAllLines替换ReadAllText(不更改任何其他内容),但没有性能更改.

有没有更快的方法来检查字符串是否包含在任何文件(大量的大文件)中?

编辑

我承认我没有像我想的那样表达自己,说我有一个字符串列表.我实际拥有的是一个csv文件列表,然后我将其删除,然后遍历这些文件的每一行(忽略第一行).对于每一行,我创建一个字符串,用该行的某些字段组成它,然后查看是否有任何文件包含该字符串.

foreach(var csvFile in csvFiles)
{
    var lines = File.ReadAllLines(csvFile);
    foreach(var line in lines)
    {
        if (IsHeader(line)) continue;
        var str = ComposeString(line);
        var bool = allFiles.Any(f => File.ReadAllText(f).Contains(str));
        // do stuff with the line and bool …
Run Code Online (Sandbox Code Playgroud)

.net c# performance file-io search

5
推荐指数
1
解决办法
2161
查看次数

如何使用pyodbc将变量插入数据库?

highscore= score
cursor.execute("insert into tble values (hscore) hishscore.getvalue"):
Run Code Online (Sandbox Code Playgroud)

que:score 将保存为变量 highscore。该高分需要保存到字段 hscore 中的数据库中。插入和获取价值的正确代码是什么。

sql-server pyodbc python-3.x

1
推荐指数
1
解决办法
7410
查看次数

标签 统计

.net ×1

c# ×1

file-io ×1

performance ×1

pyodbc ×1

python-3.x ×1

search ×1

sql-server ×1