我有一些音频文件(大约400GB),我想将其转换为其他格式。我编写了转换代码,并与每个目录中的每个文件并行调用,但是运行速度有点慢(例如每4小时50GB)。
您对如何加快通话速度有何建议?
// Recursivly find all directories in given path
DirectoryFinder finder = new DirectoryFinder();
List<string> dirs = finder.GetDirectories(inPath);
Parallel.ForEach(dirs, (dir) => {
var files = Directory.GetFiles(dir, "*.vox");
Parallel.ForEach(files, (file) =>
{
try
{
VoxDecoder.DecodeFile(file);
} catch (Exception e)
{
Console.WriteLine(e.Message);
}
});
});
E:
仅添加一些更多信息:转换脚本不能很好地优化,因为它是第三方库。我认为ThreadPool缺少一些东西,因为一开始它运行的非常快,但到现在它的速度变慢了。
Ram的使用量约为400-600MB / 16GB CPU使用率很高(大约100%),它锁定在435个线程上。
我只是想知道为什么一开始它真的很快,而现在却真的很慢。
感谢所有人。
答案 0 :(得分:-1)
是一个I / O密集型进程,应在Task中进行处理,以免造成阻塞的I / O。字典/ Concurrent Dictionary应该用spinlock锁定,以防止并行任务进入关键部分。 VoxDecoder应该有自己的任务。 根据环境的不同,应该平衡负载,以免所有任务并行运行以有效利用RAM /处理器