在最近的项目实施过程中,我们遇到了一个性能瓶颈:在线调用ComfyUI的API进行绘画时,速度逐渐下降。经过深入调查,我们发现问题根源在于累积的任务量过大。经过一整天的绘图作业,生成的图片文件在输出目录中占用了超过10GB的磁盘空间,这严重影响了通过view接口检索文件的速度。为了解决这一问题,我建了一个自动化任务计划,该计划每小时自动执行一次PowerShell脚本,以清理不再需要的图片文件,从而优化磁盘性能并提升系统响应速度。
1、创建PowerShell脚本
把以下代码保存为文件 CleanupOldFilesOfoutput.ps1
放在comfyui根目录下。
$targetDir = "E:\SD\kolors\output" # 替换为你的output目录的实际路径
$limit = (Get-Date).AddHours(-1) # 设置1小时前的时间点
# 遍历output目录下的所有文件
Get-ChildItem -Path $targetDir -File | ForEach-Object {
$filePath = $_.FullName
$fileCreationTime = $_.CreationTime
# 打印文件的创建时间
Write-Host "File: $filePath, Creation Time: $fileCreationTime"
# 判断文件的创建时间是否是1小时前
if ($fileCreationTime -lt $limit) {
# 如果是1小时前创建的,就删除文件
Write-Host "Deleting file: $filePath"
Remove-Item -Path $filePath -Force
} else {
# 如果不是1小时前创建的,就打印不删除
Write-Host "Not deleting file: $filePath"
}
}
2、创建自动执行任务计划
下面再用cmd命令创建个任务计划 Create_CleanupOldFilesOfoutputs_Task.bat
放到comfyui根目录下。
@echo off
set TASK_NAME=CleanupOldFilesOfoutputsTask
set TASK_COMMAND=powershell -File %~dp0CleanupOldFilesOfoutput.ps1
REM 查询任务计划
schtasks /query /TN %TASK_NAME% /FO LIST | findstr %TASK_NAME%
REM 如果上面的命令返回了任务计划的名称,说明任务计划存在
if %errorlevel% EQU 0 (
echo Task %TASK_NAME% exists. Deleting it...
schtasks /delete /TN %TASK_NAME% /F
if %errorlevel% neq 0 (
echo Failed to delete task %TASK_NAME%
exit /b %errorlevel%
)
)
REM 创建新的任务计划
echo Creating task %TASK_NAME%...
schtasks /create /sc hourly /st 00:00 /tn %TASK_NAME% /tr "%TASK_COMMAND%" /ru SYSTEM
if %errorlevel% NEQ 0 (
echo Failed to create task %TASK_NAME%
exit /b %errorlevel%
)
echo Task %TASK_NAME% created successfully.
3、执行创建任务计划脚本
最后用管理员权限Create_CleanupOldFilesOfoutputs_Task.bat执行即可.
Windows 11:按Windows 键 + R
,输入“cmd”,按Ctrl + Shift + Enter
4、测试任务计划
在cmd命令行执行以下脚本测试
powershell -File E:\SD\kolors\CleanupOldFilesOfoutput.ps1
如果执行失败,需要更改执行策略 ,打开PowerShell执行以下命令:
在 Windows 搜索栏中输入 PowerShell
,然后右键点击 Windows PowerShell
并选择 以管理员身份运行
在 PowerShell 窗口中,输入 Get-ExecutionPolicy
并按回车。这将显示当前的执行策略设置。
如果显示Restricted,则需要执行以下命令来更改执行策略。
输入以下命令之一,然后按回车:
Set-ExecutionPolicy RemoteSigned
或者
Set-ExecutionPolicy Unrestricted
系统可能会提示你确认更改。输入 Y
并按回车以继续。
再次测试,提示正在删除文件即已完成设置
5、总结与建议
完成上述设置后,您将不再受制于图片数量过多导致的存储空间膨胀,以及由此引发的接口响应速度减慢问题。若需评估图片生成效果,您可以通过调整PowerShell脚本,延长文件保留时间,以满足您的查看需求。此方案特别适用于线上任务执行环境,而在个人测试场景中,由于任务量较小,通常不会对绘图速度造成影响,因此清理操作并非必要。