I had another idea. Currently, ExifTool reads the image in blocks which are a multiple of 64kB and buffers them in memory when reading from a pipe. This buffering is done in File::RandomAccess.pm, and the minimum block size is set by the variable $CHUNK_SIZE in that file. If you want to tweak the performance you could play with this block size. I suspect 4k, 8k or 16k might be optimal if piping across slow network connections. The best value would depend on the average size of the EXIF data in your images -- a block size just larger than this may be best.
Let me know if this improves performance for you. The 64k block size was rather arbitrary, and a smaller value might be best. I will do some testing myself. Since the buffering is not done when reading directly from a file (only pipes are buffered), we are free to play with the buffer size without affecting the processing speed for most users.
(6)
]
