Самая дорогая часть - это ввод / вывод. И этот цикл:
for (i = 0; i <= totalinhash; i++)
{
if (hashs1[i].ContainsKey(filenamef))
{
sw.Write(hashs1[i][filenamef]);
}
if (hashs2[i].ContainsKey(filenameq))
{
sw2.Write(hashs2[i][filenameq]);
}
...
}
чередуется между разными файлами. Это, вероятно, вызовет дополнительное движение головы и создаст фрагментированные файлы (замедляя будущие действия с этими файлами).
Я бы использовал:
for (i = 0; i <= totalinhash; i++)
{
if (hashs1[i].ContainsKey(filenamef))
{
sw.Write(hashs1[i][filenamef]);
}
}
for (i = 0; i <= totalinhash; i++)
{
if (hashs2[i].ContainsKey(filenameq))
{
sw2.Write(hashs2[i][filenameq]);
}
}
...
Но, конечно, вы должны это измерить. Например, это не будет иметь большого значения для SSD, только для механических дисков.