Вызов функции zError в zLib влияет на производительность - PullRequest
1 голос
/ 29 декабря 2011

При использовании zlib 1.25 в проекте iOS я заметил в своем профилировщике (Инструменты), что функция zError вызывается неоднократно и занимает 50% от общего времени надувания.

Кто-нибудьзнаете почему zError будет вызываться так?Я не называю это нигде в своем собственном коде, который представляет собой довольно простую функцию надувания, вставленную ниже:

int UPNExtractorGZInflate(const void *src, int srcLen, void *dst, int dstLen) {
    z_stream strm  = {0};
    strm.total_in  = strm.avail_in  = srcLen;
    strm.total_out = strm.avail_out = dstLen;
    strm.next_in   = (Bytef *) src;
    strm.next_out  = (Bytef *) dst;

    strm.zalloc = Z_NULL;
    strm.zfree  = Z_NULL;
    strm.opaque = Z_NULL;

    int err = -1;
    int ret = -1;

    err = inflateInit2(&strm, (15 + 16)); //15 window bits, and the +16 tells zlib to decode gzip
    if (err == Z_OK) {
        err = inflate(&strm, Z_FINISH);
        if (err == Z_STREAM_END) {
            ret = strm.total_out;
        }
        else {
             inflateEnd(&strm);
             return err;
        }
    }
    else {
        inflateEnd(&strm);
        return err;
    }

    inflateEnd(&strm);
    return ret;
}

А вот соответствующий вывод профилировщика (обратите внимание, что zError занимает 50% от общего времени надувания):

Profiler output

1 Ответ

1 голос
/ 05 февраля 2012

zError не вызывается ни одной функцией zlib.Если вы не вызываете его, значит, ваш профилировщик неправильно определяет функцию, занимающую это время.

...