Я использую следующий код для записи последовательности 16-битных изображений в градациях серого (пустой массив для целей этого вопроса) в многостраничный TIFF:
int numberOfPages = 1000;
int width = 256;
int height = 256;
string fileName = "test.tif";
ushort[] image = new ushort[width * height];
byte[] buffer = new byte[width * height * sizeof(ushort)];
Stopwatch stopWatch = new Stopwatch();
using (Tiff output = Tiff.Open(fileName, "w"))
{
if (output == null)
{
return;
}
stopWatch.Start();
for (int i = 0; i < numberOfPages; i++)
{
Buffer.BlockCopy(image, 0, buffer, 0, buffer.Length);
output.SetField(TiffTag.IMAGEWIDTH, width);
output.SetField(TiffTag.IMAGELENGTH, height);
output.SetField(TiffTag.SAMPLESPERPIXEL, 1);
output.SetField(TiffTag.BITSPERSAMPLE, 16);
output.SetField(TiffTag.ORIENTATION, Orientation.TOPLEFT);
output.SetField(TiffTag.XRESOLUTION, 96);
output.SetField(TiffTag.YRESOLUTION, 96);
output.SetField(TiffTag.PLANARCONFIG, PlanarConfig.CONTIG);
output.SetField(TiffTag.PHOTOMETRIC, Photometric.MINISBLACK);
output.SetField(TiffTag.COMPRESSION, Compression.NONE);
output.SetField(TiffTag.FILLORDER, FillOrder.MSB2LSB);
output.SetField(TiffTag.SUBFILETYPE, FileType.PAGE);
output.SetField(TiffTag.PAGENUMBER, i + 1, numberOfPages);
output.WriteEncodedStrip(0, buffer, buffer.Length);
output.WriteDirectory();
}
stopWatch.Stop();
}
Debug.WriteLine(stopWatch.ElapsedMilliseconds);
Он отлично работает до нескольких сотен страниц, но кажется, что время выполнения не увеличивается линейно с увеличением количества страниц. Например :
1000 страниц --- 3130 мс
2000 страниц --- 11778 мс
3000 страниц --- 25830 мс
Я также пытался использовать режим добавления внутри цикла, но получил аналогичные результаты.
Я делаю это неправильно или я должен ожидать таких накладных расходов?