[Chandler-dev] Pre-loading items as a performance optimization
Morgen Sagen
morgen at osafoundation.org
Thu Oct 5 09:42:40 PDT 2006
On Oct 4, 2006, at 3:30 PM, Grant Baillie wrote:
> On 4 Oct, 2006, at 14:37, Morgen Sagen wrote:
>
>> I did try replacing those mStart and mEnd calls like this:
>>
>> testVal = getattr(EventStamp(view[key]), startAttrName)
>>
>> with calls like this:
>>
>> testVal = view.findValue(key, getattr(EventStamp,
>> startAttrName).name)
>>
>> to avoid loading, but overall a similar number of items was being
>> loaded anyway (32 items loaded versus 34, if I recall). Also,
>> there are some cases where findValue( ) doesn't work -- when an
>> attribute is Calculated, the item needs to be loaded and getattr
>> used.
>
> True, but you can refactor the Calculated to work with
> view.findValues(). This is hard to do in the general case, but it
> turns out that those mStart() and mEnd() functions are only ever
> called with a startAttr of 'effectiveStartTime' and endAttr of
> 'effectiveEndTime'.
Right -- rather than reimplementing Calculated, I did this:
try:
testVal = view.findValue(key, getattr(EventStamp,
startAttrName).name)
except AttributeError:
# Guess we have to load the item, since findValue can't
retrieve a
# Calculated
testVal = getattr(EventStamp(view[key]), startAttrName)
The exception only happened a few times (for those 'effective'
times), but overall there wasn't much change to the timings.
More information about the chandler-dev
mailing list