In 3 ways we can fix invalid shapes.
I created unit tests for all 3.
Using the same input file: a 700k polygon shapefile with 28 invalid shapes: 'Polygon must be clockwise'
In my unit test for shp.FixUp I used Parallel.ForEach:
In this code I don't copy the fields, that needs to be improved.
Further investigation is needed if we can use Parallel.ForEach with a rangePartitioner in C++ as well.