Aparajita,

Thanks that explains a lot. Its nice to know a bit more about what the code is doing.

re idp.utils.GetThumbnailURlForImage you are right is is being called more than once (I forgot I have it executing in a javascript method as a sort of image preloader/highlighter). I had just assumed it was part of the original observation.

Meanwhile I think I'll convert those while loops into for loops just to gain an additional bit of speed...

Thanks for checking this out.

Regards, Michael.

On 1 Nov 2005, at 16:06, Aparajita Fishman wrote:

I'm seeing some strange behaviour when building 3 distinct rowsets in a single page. It appears that each rowset and its map methods is being called more times than there are records selected.

For example take the following code:

    $map := """
        imageURL:            `idp.utils.GetThumbnailURlForImage`;
        imageRecnum:        `record number([Images])`;
    """

    C_longint($rowSet)
$imageRowSet := RowSet.newFromSelection(->[Images];$map) ` Don't need callback

So despite only 2 image records being loaded, the image map method gets called 13 times. Catalogue Entry gets called 3 times but for only 1 record. Bibliography gets called 5 times for 3 records.

There are a few things happening here:

- When a newFromSelection RowSet is created, the row getter is called to fill the row cache with the values for an empty record. I have to do this because there is no way for me to know what the type is for a column expression without executing it. That accounts for one extra call to the column expression.

- If you are using RowSet.next to iterate through the RowSet, the last call to next will move to the record after the last, again loading empty values into the row cache. That accounts for one more extra call. So that explains the second two cases.

If you want to avoid the extra call at the end, don't use RowSet.next, instead use a for loop and call gotoRow.

As for why idp.utils.GetThumbnailURlForImage is being called so many times, the only explanation I can offer is that you must be iterating over the RowSet more than once. Are you using findRow?

Regards,

   Aparajita
   www.aparajitaworld.com

   "If you dare to fail, you are bound to succeed."
   - Sri Chinmoy   |   www.srichinmoylibrary.com


_______________________________________________
Active4D-dev mailing list
[email protected]
http://mailman.aparajitaworld.com/mailman/listinfo/active4d-dev
Archives: http://mailman.aparajitaworld.com/archive/active4d-dev/

_______________________________________________
Active4D-dev mailing list
[email protected]
http://mailman.aparajitaworld.com/mailman/listinfo/active4d-dev
Archives: http://mailman.aparajitaworld.com/archive/active4d-dev/

Reply via email to