From: Greg Hazel Date: 2010-02-09T02:14:32+09:00 Subject: [ruby-core:28115] [Bug #2721] OpenSSL::Random.random_bytes(1) is very slow the first time on Windows Issue #2721 has been updated by Greg Hazel. A common stack: ntdll.dll!RtlpNtMakeTemporaryKey+0x5866 ntdll.dll!RtlTimeToElapsedTimeFields+0x11922 ntdll.dll!RtlEnumProcessHeaps+0xac9 ntdll.dll!RtlEnumProcessHeaps+0xbc7 ntdll.dll!RtlValidateProcessHeaps+0x281 ntdll.dll!RtlTimeToElapsedTimeFields+0x12420 ntdll.dll!RtlQueryProcessHeapInformation+0x288 ntdll.dll!RtlTimeToElapsedTimeFields+0x6702 kernel32.dll!Heap32Next+0x4d LIBEAY32.dll!RAND_poll+0x45f msvcrt-ruby18.dll!rb_Array+0x2681 msvcrt-ruby18.dll!rb_funcall2+0x89 Another: ntdll.dll!memset+0x45 ntdll.dll!RtlEnumProcessHeaps+0xbc7 ntdll.dll!RtlValidateProcessHeaps+0x281 ntdll.dll!RtlTimeToElapsedTimeFields+0x12420 ntdll.dll!RtlQueryProcessHeapInformation+0x288 ntdll.dll!RtlTimeToElapsedTimeFields+0x6702 kernel32.dll!Heap32Next+0x4d LIBEAY32.dll!RAND_poll+0x45f msvcrt-ruby18.dll!rb_Array+0x2681 msvcrt-ruby18.dll!rb_funcall2+0x89 Allocating the same amount of memory in a single string does not cause the same slow-down. So it looks like by defining classes many tiny malloc()s are done, which creates a large number of heap entries to walk. ---------------------------------------- http://redmine.ruby-lang.org/issues/show/2721 ---------------------------------------- http://redmine.ruby-lang.org