1

Я предполагаю, что мой вопрос очень специфичен, но я надеюсь, что уже есть решение.

Я хочу сделать несколько папок доступными в виртуальной памяти, но не меняю способ доступа к ним, как инструмент виртуализации, который копирует файлы в виртуальную память и перенаправляет операции ввода-вывода в эти файлы в виртуальную память.

У меня есть огромные папки с исходными текстами, которые часто перекомпилируются maven, и я хочу увеличить общую скорость сборки, сделав эти источники доступными в ram вместо hdd.

Я знаком с ImDisk, но я не могу разрушить среду, изменив пути к источникам (есть много уже настроенных инструментов).

Таким образом, вопрос: есть ли решение для вышеописанной проблемы?

С уважением

1 ответ1

3

Возможное решение

При условии, что:

  • Вы уже создали ОЗУ в физической памяти, назначенной R: (любая другая буква тоже подойдет).
  • Вы хотите сделать папку C:\Folder1 доступной в оперативной памяти для более быстрого доступа.
  • Folder1 хранится на локальном томе в формате NTFS.

Применение изменений

  1. Закройте все программы, которые могут получить доступ к Folder1 .
  2. Переименуйте Folder1 в Folder1.zTarget (реальное имя не важно, если оно другое).
  3. Скопируйте Folder1.zTarget на RAM-диск (R: :).
  4. Создайте ссылку соединения каталога с именем Folder1 указывающую на R:\Folder1.zTarget .

С этого момента каждый раз, когда вы обращаетесь к C:\Folder1 , на самом деле вы получаете доступ к данным, хранящимся на диске RAM (R:\Folder1.zTarget).

Возврат обратно

  1. Закройте все программы, которые могут обращаться к Folder1 (теперь ссылка для соединения с каталогом).
  2. Если какой-либо файл внутри Folder1 был изменен, скопируйте Folder1.zTarget из RAM (R: :) на диск (C: :), чтобы сохранить изменения.
  3. Удалите ссылку соединения каталога с именем Folder1 .
  4. Переименуйте Folder1.zTarget обратно в Folder1 .

Пакетная автоматизация

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

Пример скрипта

После краткой инициализации скрипт проверит, есть ли какие-либо папки, имя которых содержит пользовательский суффикс. Затем он будет продолжать применять или отменять изменения для каждого набора папок в переменной folders , как описано выше, за исключением шагов "закрыть все программы".

@echo off
set folders="C:\Folder1","C:\Some other\folder"
set suffix=zTarget
set ramdisk=R:

for %%G in (%folders%) do (
dir "%%~dpG" /a:d | find ".%suffix%" >nul
goto :check
)

:check
if "%errorlevel%"=="0" goto :revert

:apply
for %%G in (%folders%) do (
if exist "%%~G\" (
ren "%%~G" "%%~nG.%suffix%"
xcopy "%%~G.%suffix%" "%ramdisk%%%~pnG.%suffix%" /e /i /f /h /r /k /y /j
mklink /j "%%~G" "%ramdisk%%%~pnG.%suffix%"
echo.
))
goto :end

:revert
for %%G in (%folders%) do (
if exist "%%~G.%suffix%\" (
xcopy "%ramdisk%%%~pnG.%suffix%" "%%~G.%suffix%" /e /i /f /h /r /k /y /j 
rd "%%~G"
ren "%%~G.%suffix%" "%%~nG"
echo.
))

:end
pause
exit /b

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .