Этот простой код потребляет до + 300 МБ памяти, а GC.start
ничего не делает.
Я на Windows 32bit, Ruby 2.4.4p296 (версия 20101-03-28 63013) [i386-mingw32]
require 'win32/api'
EnumWindows = Win32::API.new('EnumWindows', 'KP', 'L', 'user32')
GetWindowTextW = Win32::API.new('GetWindowTextW', 'LPI', 'I', 'user32')
callback = Win32::API::Callback.new('LP', 'I') do |handle|
if GetWindowTextW.call(handle, buffer = "\0" * 1024, buffer.length) != 0
buffer.force_encoding('utf-16LE')
end
1
end
3.times do
1000.times { EnumWindows.call(callback, nil) }
sleep(1)
GC.start # Do nothing
end
Откройте диспетчер задач и проверьте память.
Спасибо!