gpt4 book ai didi

c# - 快速搜索一组元素

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:04:16 33 4
gpt4 key购买 nike

我正在尝试在我的硬盘上的一堆文件中搜索二进制模式。我试图用 .net 中内置的东西找到一些方法,但我似乎找不到任何能让我搜索一组数据的方法,而不是仅仅一个字节的数据,除非我转换我的首先将二进制数据转换为字符串,然后使用 String.IndexOf(string value)

我正在编写我自己的 Boyer-Moor 流搜索算法的一半,但我想我应该先检查这里以防我确实错过了有效执行此操作的方法。

这是我目前只搜索文本的方法,效果很好,我只是不知道如何处理二进制模式

private string _string;
private byte[] _array;

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
Parallel.ForEach(Directory.EnumerateFiles(_folder, _filter, SearchOption.AllDirectories)
, Search);
}

private void Search(string filePath)
{

if (numbers)
{
var fileBinary = File.ReadAllBytes(filePath);
if (fileBinary.MagicFunctionToDoContains(_array)) //Need help here
{
lbResults.BeginInvoke(new Action<string>(AddResult), filePath);
}
}
else
{
var fileText = File.ReadAllText(filePath, Encoding.ASCII);
if (fileText.IndexOf(_string, StringComparison.OrdinalIgnoreCase) >= 0)
{
lbResults.BeginInvoke(new Action<string>(AddResult), filePath);
}
}
}

字节数组最大不会超过 8 个字节,常见情况是 4 个字节,如果这会影响建议的话。

.net 中是否有任何内置的东西或我可以用来执行此操作的预先编写的示例?

最佳答案

Boyer-Moor 算法的编码应该很简单。但是,对于如此短的模式(4-8 字节),与逐字节搜索相比,我怀疑您是否看到了性能提升。

你可以做些什么来提高性能,就是使用unsafefixed 关键字的指针算法,因为数组索引器会在你每次使用时检查你的索引变量访问您的 fileBinary 数组。

关于c# - 快速搜索一组元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7797412/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com