减少在gtk2和ocra上构建的ruby应用程序的加载时间

时间:2015-09-01 09:55:30

标签: ruby exe gtk2 ocra

粘贴一个小例子,使用gtk2 gem启动系统托盘图标。

#!/usr/bin/env ruby
# encoding: UTF-8

require 'gtk2'

si=Gtk::StatusIcon.new
si.stock=Gtk::Stock::DIALOG_INFO
si.tooltip='StatusIcon'
si.signal_connect('activate'){|icon| icon.blinking=!(icon.blinking?)}

info=Gtk::ImageMenuItem.new(Gtk::Stock::INFO)
info.signal_connect('activate'){p "Embedded: #{si.embedded?}"; p "Visible: #{si.visible?}"; p "Blinking: #{si.blinking?}"}
quit=Gtk::ImageMenuItem.new(Gtk::Stock::QUIT)
quit.signal_connect('activate'){Gtk.main_quit}
menu=Gtk::Menu.new
menu.append(info)
menu.append(Gtk::SeparatorMenuItem.new)
menu.append(quit)
menu.show_all
si.signal_connect('popup-menu'){|tray, button, time| menu.popup(nil, nil, button, time)}

si.signal_connect('scroll-event'){|icon, event|
    modifier=event.state#A GdkModifierType indicating the state of modifier keys and mouse buttons
##Handle only control and shift key
    ctrl_shift=(Gdk::Window::CONTROL_MASK|Gdk::Window::SHIFT_MASK)
    mod=modifier&ctrl_shift
    case mod
    when 0
        print "(None)"
    when Gdk::Window::CONTROL_MASK
        print "Control+"
    when Gdk::Window::SHIFT_MASK
        print "Shift+"
    when (Gdk::Window::CONTROL_MASK|Gdk::Window::SHIFT_MASK)
        print "Control+Shift+"
    end
##Check for direction
    case event.direction
    when Gdk::EventScroll::UP
        print "up\n"
    when Gdk::EventScroll::DOWN
        print "down\n"
    end
}

exit if defined?(Ocra)
Gtk.main 

如果我将其作为ruby脚本运行,即ruby my_program.rb

,则会在一秒内工作

但我想分发它,所以我选择了OCRA,它构建了一个exe文件,以便用户可以在没有安装ruby或其软件包的情况下运行它。

所以我运行ocra my_program.rb --windows,它给了我一个名为my_program.exe的好的exe文件。

问题:当我启动my_program.exe时,加载程序需要25到30秒。

系统托盘图标需要1秒钟,并且在打包为exe文件时需要30倍以上才能启动。

有没有办法减少这个加载时间。非常感谢你提前。

编辑:抬头后我将ocra exe创建更改为ocra my_program.rb --windows --no-lzma。这个解决方案为我节省了10秒钟,现在需要大约18-20秒来加载程序。

我可以在更短的加载时间内进行更优化吗?请帮忙。

1 个答案:

答案 0 :(得分:2)

请参阅此处有关相关主题的讨论:

http://programming.nullanswer.com/question/28323543

可能会有所帮助。