为什么#force_encoding会消耗大量内存而没有释放它?

时间:2019-01-29 12:09:53

标签: ruby

这个简单的代码最多消耗+ 300MB的内存,而GC.start不执行任何操作。

我使用的是Windows 32位Ruby 2.4.4p296(2018-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

打开您的任务管理器并检查内存。

谢谢!

0 个答案:

没有答案