Skip to content

Instantly share code, notes, and snippets.

@mkaschenko
Created October 22, 2018 06:05
Show Gist options
  • Save mkaschenko/4e35fc0eb4ef4dc8f3844602ebc67530 to your computer and use it in GitHub Desktop.
Save mkaschenko/4e35fc0eb4ef4dc8f3844602ebc67530 to your computer and use it in GitHub Desktop.
# frozen_string_literal: true
require 'axlsx' # https://github.com/randym/axlsx
require 'rubyXL' # https://github.com/weshatheleopard/rubyXL
require 'spreadsheet' # https://github.com/zdavatz/spreadsheet
require 'memory_profiler'
rows = 1_000
columns = 20
report = MemoryProfiler.report do
# axlsx
package = Axlsx::Package.new
package.workbook.add_worksheet(name: 'Test') do |sheet|
rows.times do
sheet.add_row(Array.new(columns, 'test data'))
end
end
package.serialize('tmp/test_axlsx.xlsx')
# rubyXL
workbook = RubyXL::Workbook.new
worksheet = workbook.worksheets[0]
worksheet.sheet_name = 'Test'
rows.times do |row|
columns.times do |column|
worksheet.insert_cell(row, column, 'test data')
end
end
workbook.write('tmp/test_rubyxl.xlsx')
# spreadsheet
book = Spreadsheet::Workbook.new
sheet1 = book.create_worksheet(name: 'Test')
rows.times do |row|
sheet1.update_row(row, *Array.new(columns, 'test data'))
end
book.write('tmp/test_spreadsheet.xlsx')
end
report.pretty_print
# allocated memory by gem
# -----------------------------------
# 65986601 rubyXL-3.3.30
# 32016168 spreadsheet-1.1.7
# 23049567 axlsx-3.0.0.pre
# retained memory by gem
# -----------------------------------
# 1102664 axlsx-3.0.0.pre
# 5384 rubyXL-3.3.30
# 3806 spreadsheet-1.1.7
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment