A critical vulnerability was discovered in React Server Components (Next.js). Our systems remain protected but we advise to update packages to newest version. Learn More

Per Magne Skuseth
May 29, 2013
  9902
(8 votes)

EPiServer Find: Bulks, please!

Are you using Find and index lots of custom data? Improve performance by Indexing lists of objects, instead of one by one, as shown in the example below.

   1: // Not optimal 
   2: List<MyObject> objects = GetObjectsFromSomeWhere();
   3: foreach (var o in objects)
   4: {
   5:     client.Index(o);
   6: }
   1: // Better! (obviously)
   2: List<MyObject> objects = GetObjectsFromSomeWhere(); 
   3: client.Index(objects);

 

By doing this, you will significantly reduce the number of calls sent to the Find index, thus increase the general performance and decrease time taken to index.

This is fine as long as your list of objects isn’t too large, (depending on object size), but what if you have a list of 10 000 items? Or 100 000 items? Trying to index all of them at once will most likely result in a timeout error from the service. To solve this, you should split up the list and index the objects in bulks.  A simple way to do this is to create an extension method, like so:

   1: public static void IndexBulks(this IClient client, IEnumerable<object> objects, int bulkSize)
   2: {
   3:     while (objects.Any())
   4:     {
   5:         client.Index(objects.Take(bulkSize));
   6:         objects = objects.Skip(bulkSize);
   7:     }
   8: }

The extension accept a list of objects and a bulksize, and is used like this:

   1: client.IndexBulks(objects, 50);

Numbers
Indexing 1000 objects –  time taken:

  • One by one: 8 minutes, 13 seconds.
  • Bulks of 50: 4 minutes, 29 seconds. 
  • Single large bulk : As expected, the service timed out.

 

Happy indexing!

May 29, 2013

Comments

May 30, 2013 10:25 AM

Very nice post Per Magne.

Thanks for sharing

Frederik Vig
Frederik Vig Oct 31, 2013 03:56 PM

Tip from Henrik Lindström: the more the better
as long as you keep below 50mb per request.

This is when calling the index method.

Henrik Fransas
Henrik Fransas Sep 27, 2018 08:46 AM

Thanks for this!

Please login to comment.
Latest blogs
Looking back at Optimizely in 2025

Explore Optimizely's architectural shift in 2025, which removed coordination cost through a unified execution loop. Learn how agentic Opal AI and...

Andy Blyth | Dec 17, 2025 |

Cleaning Up Content Graph Webhooks in PaaS CMS: Scheduled Job

The Problem Bit of a niche issue, but we are building a headless solution where the presentation layer is hosted on Netlify, when in a regular...

Minesh Shah (Netcel) | Dec 17, 2025

A day in the life of an Optimizely OMVP - OptiGraphExtensions v2.0: Enhanced Search Control with Language Support and Synonym Slots

Supercharge your Optimizely Graph search experience with powerful new features for multilingual sites and fine-grained search tuning. As search...

Graham Carr | Dec 16, 2025

A day in the life of an Optimizely OMVP - Optimizely Opal: Specialized Agents, Workflows, and Tools Explained

The AI landscape in digital experience platforms has shifted dramatically. At Opticon 2025, Optimizely unveiled the next evolution of Optimizely Op...

Graham Carr | Dec 16, 2025

Optimizely CMS - Learning by Doing: EP09 - Create Hero, Breadcrumb's and Integrate SEO : Demo

  Episode 9  is Live!! The latest installment of my  Learning by Doing: Build Series  on  Optimizely Episode 9 CMS 12  is now available on YouTube!...

Ratish | Dec 15, 2025 |

Building simple Opal tools for product search and content creation

Optimizely Opal tools make it easy for AI agents to call your APIs – in this post we’ll build a small ASP.NET host that exposes two of them: one fo...

Pär Wissmark | Dec 13, 2025 |