Multi-threaded копирование
-
- Posts: 62
- Joined: Thu 14 Jul, 2016 11:17
- Has thanked: 12 times
Multi-threaded копирование
Если копировать файлы при помощи несколько тредов, то на SSD и не очень больших файлах это дает скорость лучше во многие разы. Есть планы добавить такую фичу в фар?
-
- Posts: 1329
- Joined: Mon 04 Apr, 2005 13:41
- Location: San Ramon, CA / Kharkov, UA
- Has thanked: 32 times
- Been thanked: 61 times
Multi-threaded копирование
Last edited by Yegor on Tue 04 Oct, 2022 00:10, edited 1 time in total.
Мы не можем ждать милостей от Фара, взять их у него — наша задача! (C) Мичурин
-
- Posts: 62
- Joined: Thu 14 Jul, 2016 11:17
- Has thanked: 12 times
-
- Posts: 1329
- Joined: Mon 04 Apr, 2005 13:41
- Location: San Ramon, CA / Kharkov, UA
- Has thanked: 32 times
- Been thanked: 61 times
Multi-threaded копирование
Вам нужно Multi-threaded копирование, кому-то фоновое, кому-то текстовый редактор, а кому-то встроенного GTA не хватает. Что, все в Фар запихивать?
Мы не можем ждать милостей от Фара, взять их у него — наша задача! (C) Мичурин
-
- Posts: 62
- Joined: Thu 14 Jul, 2016 11:17
- Has thanked: 12 times
-
- Posts: 1329
- Joined: Mon 04 Apr, 2005 13:41
- Location: San Ramon, CA / Kharkov, UA
- Has thanked: 32 times
- Been thanked: 61 times
Multi-threaded копирование
Ну кому-то не хватает, например, fold/unfold, intellisense. И, конечно же, им нужно это в Фаре, а не плагинами или макросами.
Last edited by Yegor on Tue 04 Oct, 2022 05:35, edited 1 time in total.
Мы не можем ждать милостей от Фара, взять их у него — наша задача! (C) Мичурин
-
- Posts: 62
- Joined: Thu 14 Jul, 2016 11:17
- Has thanked: 12 times
Multi-threaded копирование
Плохая аналогия.
Тут, собственно говоря, выбор простой - либо копировать быстро, либо медленно. Я не вижу никаких аргументов в пользу второго варианта, кроме лени и кое-какерства.
Multi-threaded копирование
Надеюсь, вы покажете как надо, или почитайте о себе в правилах форума.CodeMonkey wrote: ↑Tue 04 Oct, 2022 06:29 Я не вижу никаких аргументов в пользу второго варианта, кроме лени и кое-какерства.
Вообще были люди, которые не только говорили, был (даже есть) плагин FileCopyEx.
Но заброшен, глючный и как ни странно медленный.
-
- Posts: 62
- Joined: Thu 14 Jul, 2016 11:17
- Has thanked: 12 times
Multi-threaded копирование
В порядке эксперимента, сравнил копирование 3 ГБ небольших файлов. В фаре это занимает 40 секунд, а при копировании в 32 треда - 8.69 секунд. Итого, в 4.5 раза быстрее.
Но если хотите назло бабушке сделать медленно, то отговорить конечно не получится.
Но если хотите назло бабушке сделать медленно, то отговорить конечно не получится.
-
- Posts: 1329
- Joined: Mon 04 Apr, 2005 13:41
- Location: San Ramon, CA / Kharkov, UA
- Has thanked: 32 times
- Been thanked: 61 times
Multi-threaded копирование
Разве с тем что это быстрее, кто-то спорит? Есть пара вариантов решения. Задача добавления в Фар такого функционала - нетривиальная (представьте, что в 32-х потоках вам нужно спросить пользователя о перезаписи какого-то файла или произошла какая-то ошибка).
Считаете задачу тривиальной - исходники открыты.
Считаете задачу тривиальной - исходники открыты.
Мы не можем ждать милостей от Фара, взять их у него — наша задача! (C) Мичурин
-
- Posts: 62
- Joined: Thu 14 Jul, 2016 11:17
- Has thanked: 12 times
Multi-threaded копирование
Проверить список всех файлов перед началом копирования, никаких проблем.
Да и вообще, не помешала бы опция "перезаписывать всегда" в диалоге в самом начале.
- HaRT
- Moderator
- Posts: 10865
- Joined: Tue 30 Aug, 2005 17:21
- Has thanked: 221 times
- Been thanked: 358 times
Multi-threaded копирование
Вы не поверите, она там есть, просто надо повнимательнее смотреть.CodeMonkey wrote: ↑Wed 05 Oct, 2022 16:39 не помешала бы опция "перезаписывать всегда" в диалоге в самом начале
Нет практической возможности предвидеть все ошибки, которые могут возникнуть в ходе копирования. (Примеры: копируем на сетевой диск, и отвалилась сеть; запись обломилась из-за физического сбоя носителя; и т.д.)CodeMonkey wrote: ↑Wed 05 Oct, 2022 16:39 Проверить список всех файлов перед началом копирования, никаких проблем.
Разумеется, можно придумать нормальные способы со всем этим разобраться, но, как уже было отмечено выше, задача эта нетривиальная, и до сих пор желающих это должным образом добавить в Фаре (или хотя бы починить в плагине FileCopyEx) не нашлось, в т.ч. среди тех, кто очень настойчиво требует.
Фар есть инструмент, а не нянька. © 2009 DrKnS
-
- Posts: 62
- Joined: Thu 14 Jul, 2016 11:17
- Has thanked: 12 times
Multi-threaded копирование
Плохо, когда надо смотреть очень внимательно.
Ну ок, произошла ошибка. Если это не ожидаемая ошибка типа уже существующего или заблокированного файла, просто прекращаем все операции и спрашиваем.
- zg
- zero-gravity
- Posts: 6035
- Joined: Tue 15 Mar, 2005 17:36
- Location: riga
- Been thanked: 185 times
- Contact:
Multi-threaded копирование
код, используемый для тестирования, можно посмотреть?CodeMonkey wrote: ↑Wed 05 Oct, 2022 00:28 В порядке эксперимента, сравнил копирование 3 ГБ небольших файлов. В фаре это занимает 40 секунд, а при копировании в 32 треда - 8.69 секунд. Итого, в 4.5 раза быстрее.
Но если хотите назло бабушке сделать медленно, то отговорить конечно не получится.
-
- Posts: 62
- Joined: Thu 14 Jul, 2016 11:17
- Has thanked: 12 times
Multi-threaded копирование
А это что-то изменит?
Code: Select all
class Program
{
static void Main(string[] args)
{
var sourcePath = args[0];
var targetPath = args[1];
var size = 0L;
var count = 0;
var sync = new object();
var watch = Stopwatch.StartNew();
var files = new DirectoryInfo(sourcePath).EnumerateFiles("*", SearchOption.AllDirectories);
Parallel.ForEach(files, new() { MaxDegreeOfParallelism = 32, },
file =>
{
var source = file.FullName;
var relative = source[sourcePath.Length..];
var target = @$"{targetPath}\{relative}";
var targetDir = Path.GetDirectoryName(target);
Directory.CreateDirectory(targetDir);
File.Copy(source, target, true);
lock (sync)
{
count++;
size += file.Length;
}
});
watch.Stop();
Console.WriteLine($"Finished: {watch.Elapsed}, {count}, {size}, {size / watch.Elapsed.TotalSeconds}");
}
}
Для сравнения, фар на тех же данных потратил 62 секунды. Медленнее в 4.88 раза.
Last edited by CodeMonkey on Fri 07 Oct, 2022 05:30, edited 1 time in total.