这个简单的代码最多消耗+ 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
打开您的任务管理器并检查内存。
谢谢!