Проблемы производительности Java2D

С forfiles я не вижу возможности выполнить вашу задачу по возвращению новейшего (самого последнего) количества файлов.

Итак, моя идея для этого подхода такова:

  • использовать dir /B /A:-D /T:C /O:-D для извлечения голого списка (/B) файлов (без каталогов, /A:-D), отсортированных по дате создания (/T:C; если вы хотите использовать последнюю дату модификации, просто удалите /T:C) в порядке убывания (/O:-D), что означает сначала самые новые элементы,
  • , чтобы поместить цикл for /F "eol=| delims=", чтобы собрать и проанализировать вывод dir по строкам, то есть файл по файлу, не за исключением имен файлов, начинающихся с ; (eol=|, | является незаконным для имен файлов), а не для разбиения имен файлов, содержащих пробелы типа SPACE или TAB (delims=);
  • , чтобы установить переменную, которая составляет счетчик, увеличивающийся на каждую итерацию цикла;
  • , чтобы поместить условие if внутри цикла, чтобы проверить, достиг ли счетчик желаемого предельного числа, и в случае, если оно goto;

Вот связанный код :

@echo off
setlocal EnableExtensions DisableDelayedExpansion

rem Define global constants here:
set "TARGETPATH=\path\to\files\*.*"
set /A "TOTAL=10"

set /A "COUNT=0"
for /F "eol=| delims=" %%F in ('
    dir /B /A:-D /T:C /O:-D "%TARGETPATH%"
') do (
    echo(%%F
    set /A COUNT+=1
    setlocal EnableDelayedExpansion
    if !COUNT! GEQ %TOTAL% (
        endlocal
        goto :NEXT
    ) else (
        endlocal
    )
)
:NEXT
endlocal
exit /B

Я переключил задержанное расширение переменной в цикле for /F, чтобы избежать проблем, когда имена файлов файлов содержат восклицательные знаки !, которые теряются в line echo(%%F, если он включен.


Обновить

Следующий код выполняет исходную задачу вашего вопроса, а именно: удалять файлы в заданном каталоге, но сохранять последнее число файлов:

@echo off
setlocal EnableExtensions DisableDelayedExpansion

rem Define global constants here:
set "TARGETPATH=\path\to\files\*.*"
set /A "TOTAL=10"

set "SKIPOPT=" & if %TOTAL% GTR 0 set "SKIPOPT=skip=%TOTAL% "
for /F "%SKIPOPT%eol=| delims=" %%F in ('
    dir /B /A:-D /T:C /O:-D "%TARGETPATH%"
') do (
    del /P "%%F"
)
endlocal
exit /B

Поскольку for /F поддерживает skip=, чтобы пропустить указанное количество строк, и поэтому файлы в нашей ситуации, будем использовать его. Он указан косвенно здесь через переменную SKIPOPT, которая содержит всю строку параметров, такую ​​как skip=10 (при условии, что для параметра TOTAL установлено значение 10). Запрос if %TOTAL% GTR 0 реализован для того, чтобы сценарий не сработал, если TOTAL - 0, потому что for /F не принимает параметр skip=0.

Переключатель /P на Команда del позволяет отобразить подсказку Delete (Y/N)? для целей тестирования. Если вам не нужны какие-либо подсказки, просто удалите его.

50
задан Robert Gamble 12 November 2008 в 03:52
поделиться

2 ответа

Я думаю, что нашел решение путем исследования и соединения остатков от слишком многих поисков Google.

Здесь это, комментарии и все:

private BufferedImage toCompatibleImage(BufferedImage image)
{
    // obtain the current system graphical settings
    GraphicsConfiguration gfxConfig = GraphicsEnvironment.
        getLocalGraphicsEnvironment().getDefaultScreenDevice().
        getDefaultConfiguration();

    /*
     * if image is already compatible and optimized for current system 
     * settings, simply return it
     */
    if (image.getColorModel().equals(gfxConfig.getColorModel()))
        return image;

    // image is not optimized, so create a new image that is
    BufferedImage newImage = gfxConfig.createCompatibleImage(
            image.getWidth(), image.getHeight(), image.getTransparency());

    // get the graphics context of the new image to draw the old image on
    Graphics2D g2d = newImage.createGraphics();

    // actually draw the image and dispose of context no longer needed
    g2d.drawImage(image, 0, 0, null);
    g2d.dispose();

    // return the new optimized image
    return newImage; 
}

В моем предыдущем сообщении, GraphicsConfiguration был тем, что содержало информацию, должен был создать оптимизированные изображения в системе. Это, кажется, работает вполне прилично, но я думал бы, что Java автоматически сделает это для Вас. Очевидно, Вы не можете стать слишком довольными Java.:) Я предполагаю, что закончил тем, что ответил на свой собственный вопрос. О, хорошо надо надеяться, это поможет некоторым из Вас, я видел попытку использовать Java для 2D игр.

59
ответ дан RamenChef 7 November 2019 в 21:06
поделиться

Из того, что я помню, когда я думал о выполнении графики, программирующей в Java, созданные в библиотеках являются медленными. Мне рекомендовали о GameDev. Сеть, что любой делающий что-либо серьезное должен был бы использовать что-то как jogl

1
ответ дан Nick Stinemates 7 November 2019 в 21:06
поделиться
Другие вопросы по тегам:

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