Я пытаюсь написать стопки изображений в файлы TIFF. Изображения имеют размер 256 * 256 пикселей, каждый стек содержит 1000 изображений. Запись одного из этих файлов занимает около 4 минут - так что, скорее всего, что-то не так с моим кодом.Ускорить запись нескольких изображений TIFF?
Вот что я делаю:
void Tiff_WriterSplit(float data[], int PicNum, int WIDTH, int LENGTH, char PATH[]) {
int i;
int rows = LENGTH, columns = WIDTH;
TIFF* tif;
if (PicNum == 0)
tif = TIFFOpen(PATH, "w");
else
tif = TIFFOpen(PATH, "a");
TIFFSetField(tif, TIFFTAG_IMAGEWIDTH, columns);
TIFFSetField(tif, TIFFTAG_IMAGELENGTH, rows);
TIFFSetField(tif, TIFFTAG_SAMPLESPERPIXEL, 1);
TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, 32);
TIFFSetField(tif, TIFFTAG_SAMPLEFORMAT, SAMPLEFORMAT_IEEEFP);
for (i = 0; i < rows; i++)
TIFFWriteScanline(tif, &data[i * columns], i, 0);
TIFFWriteDirectory(tif);
TIFFClose(tif);
}
Эта функция Tiff_WriterSplit
будет вызываться для каждого изображения в стеке. Первое изображение будет иметь PicNum = 0
, чтобы открыть файл tiff в режиме w
, все следующие изображения будут иметь PicNum > 0
, чтобы открыть его в режиме a
. Запись начинается со скоростью около 40 МБ/с и замедляется и замедляется с увеличением размера файла - примерно до 1 МБ/с. Как я могу оптимизировать производительность?
На каком устройстве вы пишете? –
Я запускаю это на определенной «рабочей лошади», которая берет данные с сервера (через 10 Gbit ethernet) и записывает их обратно на сервер. Я также записываю необработанные данные в двоичном формате на сервер со скоростью ~ 100 МБ/с. Итак, аппаратное обеспечение не должно быть проблемой здесь ... – Dominic
@thomas Спасибо за предложение! Это действительно проблема с сервером - хранение файлов локально занимает <1 с на файл. Я попытаюсь сохранить их локально и затем скопировать их на сервер, чтобы избежать написания этих крошечных фрагментов по сети. – Dominic