We're in the process of switching over from an in-house ORM to Rose. So far things are going great! However, when we ran a profiler on one of our tests we noticed that we were spending a lot of time in some pretty low level rose methods:
[EMAIL PROTECTED] mercury]# grep Rose pre|head -7
%Time Sec. #calls sec/call F name
6.02 8.9952 717820 0.000013
Rose::DB::Object::Metadata::Column::name
4.84 7.2383 359 0.020162
Rose::DB::Object::QueryBuilder::build_select
4.05 6.0488 567 0.010668 Rose::DB::Object::Metadata::columns
2.82 4.2211 811 0.005205 Rose::DB::Object::load
2.78 4.1585 157459 0.000026
<anon>:.../5.8.5/Rose/DB/Object.pm:344
1.13 1.6901 32070 0.000053 Rose::DB::Object::Metadata::column
0.73 1.0943 359 0.003048
Rose::DB::Object::Manager::get_objects
For reference we spent 18 seconds in DB::st::execute. Looking through the
code, I found a few place where columns were doubly sorted by name. Also,
switching other name sorts to Schwartzian transforms got a big boost as
well. Here's the post-patch benchmark:
[EMAIL PROTECTED] mercury]# grep Rose post|head -7
5.01 5.8684 359 0.016346
Rose::DB::Object::QueryBuilder::build_select
3.29 3.8590 811 0.004758 Rose::DB::Object::load
3.19 3.7388 372712 0.000010
Rose::DB::Object::Metadata::Column::name
3.08 3.6098 157459 0.000023
<anon>:.../5.8.5/Rose/DB/Object.pm:344
1.17 1.3705 32070 0.000043 Rose::DB::Object::Metadata::column
0.74 0.8672 359 0.002416
Rose::DB::Object::Manager::get_objects
0.67 0.7882 567 0.001390 Rose::DB::Object::Metadata::columns
Total savings of 25-30 seconds. I've attached the patch against 0.764.
Thanks!
--Nate
patch
Description: Binary data
------------------------------------------------------------------------- This SF.net email is sponsored by DB2 Express Download DB2 Express C - the FREE version of DB2 express and take control of your XML. No limits. Just data. Click to get it now. http://sourceforge.net/powerbar/db2/
_______________________________________________ Rose-db-object mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/rose-db-object
