В dll использую thread local storage (TLS) index для хранения указателя данных потока, создаваемого внутри dll. До недавнего времени обращений для создания TSL индекса функцией TlsAlloc() и его освобождения функцией TlsFree(.) в задаче было 2-3 раза и никаких проблем не наблюдалось. Сейчас понадобилось делать около 10000 обращений - и обнаружилась очень неприятная вещь:
с увеличением количества вызовов TlsAlloc() --> TlsFree(.) --> TlsAlloc() --> TlsFree(.) --> ... время выполнения этих функций (или одной из них - не могу определить) увеличивается катастрофически - после 14 обращений TlsAlloc() + TlsFree(.) ~ на 2.5% по сравнению с выполнением предыдущих 14 вызовов.
А это значит, что после 100 раз по 14 обращений время увеличивается ~ в 12 раз (проверил); после 200 раз - в 140 раз !!! (не проверил).
Что это за дела и как с этим бороться?
dll сделана на Compaq Visual Fortran 6.6, вызывается из VC++ программы (VS.NET 2003) в Win2003.
с увеличением количества вызовов TlsAlloc() --> TlsFree(.) --> TlsAlloc() --> TlsFree(.) --> ... время выполнения этих функций (или одной из них - не могу определить) увеличивается катастрофически - после 14 обращений TlsAlloc() + TlsFree(.) ~ на 2.5% по сравнению с выполнением предыдущих 14 вызовов.
А это значит, что после 100 раз по 14 обращений время увеличивается ~ в 12 раз (проверил); после 200 раз - в 140 раз !!! (не проверил).
Что это за дела и как с этим бороться?
dll сделана на Compaq Visual Fortran 6.6, вызывается из VC++ программы (VS.NET 2003) в Win2003.