mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
We no longer need the compressed data once the inflate block is
called; so clear it ASAP to reduce memory overhead. This is a
small chunk, so it only saves a few hundred kilobytes with the
script below.
before: RssAnon: 5976 kB
after: RssAnon: 5564 kB
------
require 'net/http'
require 'zlib'
response_gz = ARGV.shift or abort "#$0 TEMPORARY_FILE"
# pre-create response since compressing is slower than decompressing
unless File.readable?(response_gz)
nr = 16384 * 2
buf = ((0..255).map(&:chr).join * 128)
File.open(response_gz, 'wb') do |fp|
gzip = Zlib::GzipWriter.new(fp)
nr.times { gzip.write(buf) }
gzip.close
end
buf.clear
end
response_gz = File.open(response_gz)
s = TCPServer.new('127.0.0.1', 0)
pid = fork do
c = s.accept
c.readpartial(16384).clear
c.write("HTTP/1.1 200 OK\r\n" \
"Content-Length: #{response_gz.stat.size}\r\n" \
"Content-Encoding: gzip\r\n" \
"Accept-Ranges: bytes\r\n" \
"\r\n")
IO.copy_stream(response_gz, c)
c.close
end
addr = s.addr
Net::HTTP.start(addr[3], addr[1]) do |http|
http.request_get(-'/') do |res|
res.read_body(&:clear)
end
end
puts File.readlines(-'/proc/self/status').grep(/RssAnon/)[0]
Process.waitpid2(pid)
------
* lib/net/http/response.rb (inflate_adapter): clear compressed_chunk
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61684 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
|
||
|---|---|---|
| .. | ||
| cgi | ||
| drb | ||
| forwardable | ||
| irb | ||
| matrix | ||
| net | ||
| optparse | ||
| racc | ||
| rdoc | ||
| rexml | ||
| rinda | ||
| rss | ||
| rubygems | ||
| shell | ||
| unicode_normalize | ||
| uri | ||
| webrick | ||
| yaml | ||
| .document | ||
| abbrev.rb | ||
| base64.rb | ||
| benchmark.rb | ||
| cgi.rb | ||
| cmath.gemspec | ||
| cmath.rb | ||
| csv.gemspec | ||
| csv.rb | ||
| debug.rb | ||
| delegate.rb | ||
| drb.rb | ||
| e2mmap.rb | ||
| English.rb | ||
| erb.rb | ||
| fileutils.gemspec | ||
| fileutils.rb | ||
| find.rb | ||
| forwardable.rb | ||
| getoptlong.rb | ||
| ipaddr.gemspec | ||
| ipaddr.rb | ||
| irb.rb | ||
| logger.rb | ||
| matrix.rb | ||
| mkmf.rb | ||
| monitor.rb | ||
| mutex_m.rb | ||
| observer.rb | ||
| open-uri.rb | ||
| open3.rb | ||
| optionparser.rb | ||
| optparse.rb | ||
| ostruct.rb | ||
| pp.rb | ||
| prettyprint.rb | ||
| prime.rb | ||
| profile.rb | ||
| profiler.rb | ||
| pstore.rb | ||
| rdoc.rb | ||
| resolv-replace.rb | ||
| resolv.rb | ||
| rss.rb | ||
| rubygems.rb | ||
| scanf.gemspec | ||
| scanf.rb | ||
| securerandom.rb | ||
| set.rb | ||
| shell.rb | ||
| shellwords.rb | ||
| singleton.rb | ||
| sync.rb | ||
| tempfile.rb | ||
| thwait.rb | ||
| time.rb | ||
| timeout.rb | ||
| tmpdir.rb | ||
| tracer.rb | ||
| tsort.rb | ||
| un.rb | ||
| uri.rb | ||
| weakref.rb | ||
| webrick.rb | ||
| yaml.rb | ||