2015-09-01 56 views
2

粘貼一個小例子,它使用gtk2 gem啓動系統托盤圖標。減少構建在gtk2和ocra上的ruby應用程序的加載時間

#!/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文件,使用戶可以運行它沒有安裝紅寶石或其軟件包。

所以我運行ocra my_program.rb --windows,它給了我一個很好的exe文件my_program.exe

問題:當我啓動my_program.exe時需要25到30秒才能加載程序。

當打包成exe文件時,系統托盤圖標需要1秒鐘,啓動時間超過30次。

有沒有什麼可能的方法來減少這個加載時間。非常感謝你提前。

編輯:之後,我把ocra exe的創建改爲ocra my_program.rb --windows --no-lzma。該解決方案爲我節省了10秒,現在需要大約18-20秒才能加載程序。

我可以在更短的加載時間內對其進行優化嗎?請幫忙。

+3

乍一看:OCRA README指出它默認具有壓縮功能「LZMA壓縮(可選,默認打開)」。嘗試關閉它,它應該減少加載時間的exe文件大小的成本。 – mudasobwa

+0

已更新答案。感謝您的高舉。 – Supersonic

+1

也許這個討論包含一些提示給你http://programming.nullanswer.com/question/28323543 – dimakura

回答