【发布时间】:2015-10-27 09:29:41
【问题描述】:
我正在尝试将图像堆栈写入 TIFF 文件。图像大小为 256*256 像素,每个堆栈包含 1000 张图像。编写其中一个文件大约需要 4 分钟 - 所以我的代码很可能有问题。
这就是我正在做的事情:
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 以w 模式打开tiff 文件,以下所有图像将有一个PicNum > 0 以a 模式打开它。以大约 40 MB/s 的速度开始写入,随着文件大小的增加而变得越来越慢 - 下降到大约 1 MB/s。如何优化性能?
【问题讨论】:
-
你在什么设备上写?
-
我在一个特定的“工作马”上运行它,它从服务器(通过 10 Gbit 以太网)获取数据并将其写回服务器。我还以大约 100 MB/s 的速度将二进制格式的原始数据写入服务器。所以,硬件不应该是这里的问题......
-
@thomas 感谢您的建议!这确实是服务器的问题 - 在本地存储文件每个文件需要