Предельная скорость Файла. Копия

Мы используем простой Файл. Копия в C# для перемещения нашей базы данных копирует к дополнительным местоположениям.

Однако на некоторых серверах, это заставляет SQL-сервер в значительной степени прекращать работать. Эти серверы имеют очень ограниченную память, таким образом, они - данные подкачки страниц к жесткому диску время от времени.

Пока мы должны купить больше памяти, это не собирается происходить в течение долгого времени :-/

Таким образом, я задаюсь вопросом, могу ли я так или иначе ограничить скорость Файла. Операция копии? (Таким образом, предоставление SQL-сервера некоторой комнаты для доступа к жесткому диску)

Я мог использовать "старый школьный" подход с двумя потоками, читая и пишущий через буфер, и просто спать приблизительно 5 мс между чтениями. Но я действительно предпочел бы более опрятное решение, если такой доступен.

12
задан John Saunders 4 July 2010 в 09:16
поделиться

4 ответа

CopyFileEx может делать то, что вам нужно - у него есть функция обратного вызова, которую вы можете использовать в качестве искусственного метода замедления (хотя я не пробовал это для этого сценария, поэтому я не уверен в реальных эффектах - стоит попробовать ИМХО).

7
ответ дан 2 December 2019 в 21:42
поделиться

Вы пытались дать процессу копирования приоритет ниже обычного? Вы можете сделать это через диспетчер задач или с помощью команды start :

> start myCopyApp.exe /BELOWNORMAL
2
ответ дан 2 December 2019 в 21:42
поделиться

Один недоступен через File.Copy. У вас есть несколько других вариантов. Вы можете, как вы говорите, передавать байты вручную, иногда в спящем режиме. Вы можете использовать реализацию BITS, хотя это небольшой OTT.

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

2
ответ дан 2 December 2019 в 21:42
поделиться

Я мог бы использовать подход «старой школы» с двумя потоками, чтением и записью через буфер, и просто спать 5 мс или около того между чтениями.

Если вы это сделаете, обратите внимание на использование флага FILE_FLAG_NO_BUFFERING: в противном случае, независимо от размера буфера вашего приложения, файловая система будет буферизоваться (и, следовательно, вызывать дополнительную подкачку).

1
ответ дан 2 December 2019 в 21:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: