Microsoft имеет статью, описывающую, как Вы можете MSIL Компиляции к Собственному коду
, который можно использовать Ngen.
Собственный Генератор Изображения (Ngen.exe) является инструментом, который улучшает производительность управляемых приложений. Ngen.exe создает собственные изображения, которые являются файлами, содержащими, скомпилировал определенный для процессора машинный код и устанавливает их в собственный кэш изображений на локальном компьютере. Время выполнения может использовать собственные изображения от кэша вместо этого с помощью своевременного (JIT) компилятора для компиляции исходного блока.
, К сожалению, Вам все еще нужны библиотеки от платформы для запущения программы. Нет никакой функции, о которой я знаю с MS.Net SDK платформы, который позволяет Вам компилировать все необходимые файлы в единственный исполняемый файл
Я добавил следующий метод в класс Date:
class Date
def all_months_until to
from = self
from, to = to, from if from > to
m = Date.new from.year, from.month
result = []
while m <= to
result << m
m >>= 1
end
result
end
end
Вы используете его как:
>> t = Date.today
=> #<Date: 2009-11-12 (4910295/2,0,2299161)>
>> t.all_months_until(t+100)
=> [#<Date: 2009-11-01 (4910273/2,0,2299161)>, #<Date: 2009-12-01 (4910333/2,0,2299161)>, #<Date: 2010-01-01 (4910395/2,0,2299161)>, #<Date: 2010-02-01 (4910457/2,0,2299161)>]
Хорошо, итак, более рубиновый подход ИМХО был бы чем-то вроде:
class Month<Date
def succ
self >> 1
end
end
и
>> t = Month.today
=> #<Month: 2009-11-13 (4910297/2,0,2299161)>
>> (t..t+100).to_a
=> [#<Month: 2009-11-13 (4910297/2,0,2299161)>, #<Month: 2009-12-13 (4910357/2,0,2299161)>, #<Month: 2010-01-13 (4910419/2,0,2299161)>, #<Month: 2010-02-13 (4910481/2,0,2299161)>]
Но вам нужно быть осторожным при использовании первых дней месяца (или реализовать такую логику в месяце) ...
Я обнаружил, что мне иногда нужно делать это при создании списков избранных месяцев. Ключ - это оператор >>
в Date, который продвигает дату вперед на один месяц.
def months_between(start_month, end_month)
months = []
ptr = start_month
while ptr <= end_month do
months << ptr
ptr = ptr >> 1
end
months
end
results = months_between(Date.new(2008,12), Date.new(2009,3))
Конечно, вы можете отформатировать результаты в цикле, как вам нравится.
months << "#{Date::MONTHNAMES[ptr.month]} #{ptr.year}"
Вернет название месяца. и год («Март 2009») вместо объекта Date. Обратите внимание, что возвращаемые объекты Date будут установлены на 1-е число месяца.