Если Вы знаете, что данные являются определенно интервалом тогда int myInt = (int)x;
, должна быть самая быстрая опция. Иначе TryParse
поможет Вам разобраться в нем без замедления исключений.
BTW:
(интервал) только распаковывает поэтому быстрее,
(международные) IL =
.locals init (
[0] object x,
[1] int32 Y)
L_0000: ldc.i4.1
L_0001: box int32
L_0006: stloc.0
L_0007: ldloc.0
L_0008: unbox int32
L_000d: ldobj int32
L_0012: stloc.1
L_0013: ret
Преобразовывают. Toint32 =
.locals init (
[0] object x,
[1] int32 Y)
L_0000: ldc.i4.1
L_0001: box int32
L_0006: stloc.0
L_0007: ldloc.0
L_0008: call object [mscorlib]System.Runtime.CompilerServices.RuntimeHelpers::GetObjectValue(object)
L_000d: call int32 [mscorlib]System.Convert::ToInt32(object)
L_0012: stloc.1
L_0013: ret
After digging through the Rails source I've discovered that you can force a join by referencing a table other than the current model in either the select, conditions or order clauses.
So, if I specify an order on the Asset table:
Image.first( :conditions => {:id => id}, :include => :asset, :order => "asset.id" )
The resulting SQL will use a left outer join and everything in one statement. I would have preferred an inner join, but I guess this will do for now.
Я сам столкнулся с этой проблемой. ActiveRecord больше склоняется к тому, чтобы упростить для рубистов (которые, возможно, даже не слишком хорошо знакомы с SQL) взаимодействие с базой данных, чем с оптимизированными вызовами базы данных. Возможно, вам придется взаимодействовать с базой данных на более низком уровне (например, DBI) для повышения производительности. Использование ActiveRecord определенно повлияет на то, как вы проектируете свою схему.
Стремление к эффективности SQL заставило меня задуматься об использовании других ORM. Я не нашел ни одного, подходящего для моих нужд. Даже те, кто больше ориентируется на сам транзакционный SQL (например, Sequel), имеют тяжелый Ruby API. Я был бы доволен без Ruby-подобного API и просто вручную написал бы свой T-SQL. Настоящая выгода, которую я получаю от ORM, - это M, отображающая набор результатов (одной или нескольких таблиц) в объекты.