Nano Hash - криптовалюты, майнинг, программирование

Проблема с производительностью при перемещении файлов по сетевым ресурсам

Я пишу приложение, которое может копировать файлы в сетевом ресурсе. Обычно файлы перемещаются на один и тот же физический жесткий диск. Если вы проверите это с помощью проводника Windows, эта операция будет выполнена очень быстро. Кажется, что Windows знает об этом же месте и делает реальное перемещение, а не копирование и удаление (что было бы медленнее).

Допустим, вы хотите скопировать набор файлов:

\\computer\share\fileA.txt
\\computer\share\fileB.txt

Пункт назначения, например:

\\computer\share\subfolder

Приложение использует Windows Shell API (я писал приложение на Delphi, но проблема должна быть такой же и для других языков):

with SHFileOpStruct do
  begin
  Wnd := 0;
  wFunc := FO_MOVE;
  pFrom := PChar ('\\computer\share\fileA.txt'+#0 
                  +'\\computer\share\fileB.txt'+ #0#0);
  pTo   := PCahr ('\\computer\share\subfolder' + #0#0);
  fFlags := FOF_SILENT or FOF_NOCONFIRMATION;
  end;

Result := SHFileOperationW (SHFileOpStruct);

К сожалению, этот код выполняет «копирование и удаление», что намного медленнее для больших файлов или если у вас много файлов. Как я могу этого избежать? Есть ли способ сообщить операции перемещения, что папки находятся на одном жестком диске? Возможно, есть какое-то другое обозначение сетевого пути.

Или есть другая функция API, которая используется Проводником Windows?

Для краткого сравнения:

  • количество файлов : 260
  • размер файла для каждого из файлов: 11 кБ
  • время перемещения в Проводнике: 2 сек.
  • время перемещения с помощью SHFILEOPERATION : 20 сек.

Я использую Windows 7 в своей системе разработки, но она также должна работать на XP, поэтому я не могу использовать новый интерфейс IFileOperation.

С уважением


  • Это происходит также, если вы сначала сопоставляете букву диска для общего ресурса? 10.08.2010

Ответы:


1

Я бы проигнорировал функции API оболочки и использовал MoveFileEx или MoveFileWithProgress напрямую.

10.08.2010
  • @Coco: я не совсем уверен, так это или нет, но я думал, что это будет довольно быстро / легко узнать. 10.08.2010
  • Завтра протестирую и напишу отзыв. 10.08.2010
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..