The OrganizationServiceContext has a SaveChanges method that essentially does what it says on tin, namely the changes on the objects back to the database.
I've never used this method, preferring to use the regular Update method on the IOrganizationService instead, but last week I had a moment of doubt, what if it is faster, what if it's multi-threaded, so I decided to run some tests to see whether there was any performance difference, spoiler alert: There wasn't
The tests consisted of the update of a three fields on the account entity for 2000 accounts and were run from an idle CRM server to minimize the influence of network traffic.
Results shown below are for the average of the three runs I did, except for the parallel version, using Parallel.ForEach, where it shows the single run I did.
OrganizationServiceContext | IOrganizationService | IOrganizationService (Parallel) |
---|---|---|
126.7 s | 130.1 s | 49.6 s |
My fears were unfounded and the SaveChanges method, while slightly faster in these tests, does not seem to be appreciatively faster.
The difference is less than 3% and the slowest run using the OrganizationServiceContext was basically the same as the fastest with IOrganizationService : ~129 s