Apex Code Enhancements and Collections best practices

Spring '10 is just around the corner, with many great new features. One of the Apex Code enhancements which caught my attention was the limits on the number of items a collection can hold has been removed. The previous limit was set at 1000. Add this to the new ability to use generic sObjects to create a collection and Collections within the platform just got a whole lot more powerful.

As Ben Parker, the o-so-wise uncle of Peter Parker (aka Spiderman) once said: "with great power comes great responsibility." Changes to Collections is no different, and require some new thinking in regards to best practices.

The release notes, for example, mention that there is still a limit on heap size so care must be taken to not load up a collection and hit this limit. Good news is that a few other other Spring '10 changes can certainly be used to ensure you design your applications as efficiently as possible. 

Here are just a few new SOQL clauses and functions which can be used with collections to help make the most fo the changes.

This is certainly not a complete list, but should certainly be something every developer is familiar with.

tagged , , , , , , , , Bookmark the permalink. Trackbacks are closed, but you can post a comment.
  • http://www.mkpartners.com Matt Kaufman

    The previous limit on collections was 1000 not 200.

  • http://quintonwall.com Quinton Wall

    You are correct. I have updated the post.
    Thanks for keeping me honest

  • David Cheng

    Hi – can you tell me if aggregate queries are supported in Batch Apex?
    Thanks
    David

  • Evan Callahan

    Looks like that may be a “no.” I just tried one in a batch and got this error:
    System.Exception: Aggregate query does not support queryMore(), use LIMIT to restrict the results to a single batch

  • http://www.vankerksolutions.com Niki Vankerk

    You can use aggregate queries in a batch.
    My query looks like this:
    AggregateResult[] groupedResults = [SELECT Featured_Site__c, count(id) cnt FROM SiteClick__c where Featured_Site__c in :sites GROUP BY Featured_Site__c];
    I’m trying to count the number of records in the “SiteClick” table that are linked to each “Featured_Site”, then I go on to update each Featured_Site with its count. The actual batch is querying the “Featured_Site” object since there are thousands of those, then my code will iterate through those in chunks of 200 to count up the SiteClicks for each.
    Hope that helps.