You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何借助多线程或替代方案加速HEIC转JPEG批量处理程序

HEIC批量转JPEG提速方案

针对大规模HEIC转JPEG的性能问题,多线程/并行处理是最直接的优化方向,同时还有其他几个关键优化点可以配合使用:

一、并行处理实现(多线程)

你的单循环逻辑完全可以改成并行执行,因为每张图片的解码、转码、写入都是独立操作,没有共享资源冲突。但要注意控制并发数,避免磁盘IO过载反而拖慢速度。

VB.NET 示例代码

' 先筛选出所有HEIC文件,避免遍历无效文件
Dim heicFiles = Directory.GetFiles(oBasePath, "*.heic", SearchOption.AllDirectories)

' 并行处理,控制并发数(根据磁盘性能调整)
Parallel.ForEach(heicFiles, New ParallelOptions With {.MaxDegreeOfParallelism = Environment.ProcessorCount * 1.5}, Sub(filePath)
    ' 使用Using确保HeifImage及时释放内存
    Using heicImage As New HeifImage(filePath)
        Dim fileName = Path.GetFileNameWithoutExtension(filePath)
        Dim newPath = Path.Combine(targetDirectory, $"{fileName}.jpeg")
        heicImage.PrimaryImage.Write(newPath)
    End Using
End Sub)
  • 并发数建议:机械硬盘设为4-8,SSD可以设为CPU核心数的1-2倍,避免磁盘IO队列过长。
  • 提前筛选文件:直接用*.heic过滤,减少循环中不必要的判断,节省时间。

二、其他优化方案

  1. 更换更高效的处理库
    FileOnQ.Imaging.Heif底层基于libheif,你可以尝试LibHeifSharp这类更轻量化的绑定库,或者直接调用Windows 10+原生的WIC HEIC解码接口,部分场景下性能会有明显提升。

  2. 调整JPEG输出参数
    如果对画质要求不是极致,可以降低JPEG的压缩质量(比如设为75-85),减少磁盘写入的数据量,同时转码速度也会更快。大部分库支持在Write时传入质量参数:

heicImage.PrimaryImage.Write(newPath, New HeifJpegWriteOptions With {.Quality = 80})
  1. 优化磁盘IO
  • 把输入输出目录放在同一块SSD上,避免跨磁盘读写的额外开销。
  • 临时关闭Windows实时保护(或把处理目录加入白名单),避免杀毒软件实时扫描拖慢文件操作。
  1. 内存资源及时释放
    用Using语句包裹HeifImage,确保每次处理完图片后立即释放内存,避免内存累积导致后期处理变慢。

三、注意事项

  • 并行处理时要确保目标目录存在,且同名文件不会冲突(比如不同子目录下的HEIC文件转JPEG后重名的问题)。
  • 处理超大尺寸HEIC时,过高的并发数可能导致内存占用飙升,此时需要适当降低并发数。

内容的提问来源于stack exchange,提问作者Mech_Engineer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 23:48:23