我需要使用C#在一组文本文件中搜索大约13个字符的字符串.文本文件的数量正在变化,范围在100-1000之间.文件大小可以在1KB到10MB之间.
我尝试了打开每个文件的天真方式,逐行读取并查看字符串是否存在(使用index.of),但这太慢了.我也试过使用Boyer-Moore算法,它确实提高了时间,持续5秒,但这仍然感觉很慢.
有关如何加快搜索速度的想法吗?
我有一个位于Program Files文件夹中并接受参数的脚本:verbose从其restart
文件夹运行它效果很好:
powershell ./<file.ps1> -verbose:$True -restart
Run Code Online (Sandbox Code Playgroud)
尝试使用完整路径运行它是我遇到问题的地方:
powershell & "C:\Program Files\Folder\<file.ps1> -verbose:$True -restart"
Run Code Online (Sandbox Code Playgroud)
上面的命令不运行脚本;相反,它会打开 PS 命令提示符,退出时会在记事本中打开脚本。
我还尝试将每个变量放在单独的引号中,但这效果不佳。
我找到了使用progra~1代替的解决方法Program Files,但我想以正确的方式解决问题。
我缺少什么?
我写了一个简单的消费者 - 生产者模式来帮助我完成以下任务:
当我运行程序时,即使有5个线程,我的CPU消耗也会猛增到100%.这可能是因为我使用单个制作人来阅读文件吗?
文件示例(制表符分隔)
Column1 Column2 Column3 Column 4 Column5
A 1 * - -
B 1 * - -
C 1 % - -
Run Code Online (Sandbox Code Playgroud)
制片人
public class Producer implements Runnable{
private BlockingQueue<Map<String, Map<String, String>>> m_Queue;
private String m_Directory;
public Producer(BlockingQueue<Map<String, Map<String, String>>> i_Queue, String i_Directory)
{
m_Queue = i_Queue;
m_Directory = i_Directory;
}
@Override
public void run()
{
if (Files.exists(Paths.get(m_Directory)))
{
File[] files = new File(m_Directory).listFiles();
if (files != null)
{
for (File file …Run Code Online (Sandbox Code Playgroud)