Sure, that all makes sense, but why could it not do the initialization once (when something changes like you describe), save it, and reuse it next time?
EDIT: Ah, sorry, you're saying the enumeration/scanning for changes is what takes most of the time?