On 20 Jan 2008, at 8:12 PM, Adam R. Maxwell wrote: > > On Jan 20, 2008, at 11:01 AM, Christiaan Hofman wrote: > >> >> On 20 Jan 2008, at 7:50 PM, Adam R. Maxwell wrote: >> >>> >>> On Jan 20, 2008, at 10:40 AM, Christiaan Hofman wrote: >>> >>>> >>>> On 20 Jan 2008, at 7:33 PM, Adam R. Maxwell wrote: >>>> >>>>> >>>>> On Jan 20, 2008, at 10:21 AM, Christiaan Hofman wrote: >>>>> >>>>>> >>>>>> On 20 Jan 2008, at 7:08 PM, Adam R. Maxwell wrote: >>>>>> >>>>>>> >>>>>>> On Jan 20, 2008, at 9:52 AM, Christiaan Hofman wrote: >>>>>>> >>>>>>>> >>>>>>>> On 20 Jan 2008, at 5:56 PM, Adam R. Maxwell wrote: >>>>>>>> >>>>>>>>> >>>>>>>>> On Jan 20, 2008, at 8:35 AM, Christiaan Hofman wrote: >>>>>>>>> >>>>>>>>>> Would it be possible to initialize the SKIndexRef on the >>>>>>>>>> thread >>>>>>>>>> rather than in init? I find that initializing the cached >>>>>>>>>> index >>>>>>>>>> blocks >>>>>>>>>> the UI for a very noticeable time. I think the index can be >>>>>>>>>> accessed >>>>>>>>>> on the main thread only in the -index method and in - >>>>>>>>>> cancelForDocumentURL:. >>>>>>>>> >>>>>>>>> Can you check with Shark or Spin Control to see what's slow? >>>>>>>>> Initializing the index on the thread would require avoiding >>>>>>>>> NSFileManager, unless it's only the SKIndex creation that's >>>>>>>>> slow. >>>>>>>>> >>>>>>>> >>>>>>>> It seems to spend a lot of time unarchiving (14.5% in Shark). >>>>>>>> About >>>>>>>> half comes from +indexCachePathForDocumentURL: and half from >>>>>>>> unarchiving the index we're actually using (I have 2 cached >>>>>>>> indexes, >>>>>>>> the one I use here is significantly larger than the other). >>>>>>> >>>>>>> That's what I was afraid of (unarchiving). How big is the >>>>>>> actual >>>>>>> archive in MB? Mine at work has ~500 files indexed, and I >>>>>>> didn't >>>>>>> see >>>>>>> any slowdown or beachball. >>>>>>> >>>>>> >>>>>> It's about 50 MB, indexing about 2/3 of about 1000 items. I did >>>>>> some >>>>>> dumb timing in the initializer, and getting the cache path and >>>>>> unarchiving step are indeed the slowest. >>>>>> SKIndexOpenWithMutableData >>>>>> was pretty fast. >>>>> >>>>> Wow! That explains it; my index was < 10 MB. >>> >>> My index at home is 1.4 MB with ~200 files indexed. This is some >>> odd >>> scaling if 5x the number of items leads to 30x disk usage. I wonder >>> if the space is due to the SKIndex or the signatures? >>> >> >> Don't forget average file size. What do you guess your average file >> size is? I think for me most of my files are about 30-40 pages, but >> there are some files with several hundreds of pages. > > Average file sizes I have are likely smaller on average, but only the > first 2000 terms are indexed in any file. That's why it would be > really interesting to see if it's the signatures or the SKIndex that's > taking up all that space. > > >>>>> Yet another thing we might try is archiving objects separately >>>>> instead >>>>> of in an NSDictionary. Then we could use -[NSKeyedUnarchiver >>>>> initForReadingWithData:[NSData dataWithContentsOfMappedFile:]] to >>>>> unarchive only the document URL instead of the full root object >>>>> graph. That assumes NSKeyedUnarchiver doesn't need to read the >>>>> entire >>>>> file into memory just to archive a single key, of course. >>>>> >>>>> -- >>>>> adam >>>> >>>> It would still require a full unarchiving of the cached index we >>>> want. >>> >>> True; the unarchiving can be done on the thread, though, after -init >>> has returned. It would just cut down on overhead in case of >>> multiple >>> huge indexes stored on disk, so you wouldn't have to read all of >>> them >>> fully in order to find the right one. >> >> Of course unarchiving on the thread would mean creating the index on >> the thread. And then we need safeguards in -index. (in the cancel >> method the lock is probably sufficient). > > I'd say just creating it as a local variable and then assigning to the > ivar when it's done is sufficient. The BDSKSearch now ignores a NULL > index (but it won't get any delegate messages until the index is fully > created anyway), so -index should be fine as-is.
No that does not work. Apart from a failing OBPOSTCONDITION and a log, sometimes it does nothing. Christiaan ------------------------------------------------------------------------- This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2008. http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ _______________________________________________ Bibdesk-develop mailing list Bibdesk-develop@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/bibdesk-develop