XlsFile.SetNamedRange performance with mono

Well, 50,000 named ranges is indeed a lot, FlexCel is not optimized for that much names, as it compares the name with all existing names when you add a new one in order to not insert a name twice. This could be made much faster by having a sorted cache/hashtable of existing names, I'll see if it is feasible to add it.(The problem with caches is as always that there is one more thing to keep in synch when you modify names, and really, most files have not an important number of names). But it is doable, I'll let you know when it is working.

There are other issues with such a big number of names though that won't be that easy to solve, like for example the fact that every time you insert a row, you need to check (and potentially update) the 50,000 names to see if they were affected by the inserted row. But that should be slow in Excel itself too.

About the "TakePicture" event, the code in the dll is obfuscated: To profile you should profile over the sources themselves. I believe the actual method in 6.11 is:
FlexCel.XlsAdapter.TOle2Header.Save(System.IO.Stream,)
Which is probably an expected method to be slow as every record (even those 50,000 records from names) has to be saved.

About mono I am not sure, but indeed, mono is slower than windows .net, and not that optimized. I wonder what numbers do you get in .NET Core under linux?