Почему #force_encoding занимает много памяти и не освобождает ее? - PullRequest
0 голосов
/ 29 января 2019

Этот простой код потребляет до + 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

Откройте диспетчер задач и проверьте память.

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...