|Title:||Surprsing amount of time spent in UnsafeNativeMethods.GetSettingsValue|
|Last Modified:||2016-07-08 01:20:56|
|Version Found In:||1.0.99|
anonymous added on 2016-06-22 09:58:27:
While profiling our application I see that we spend a surprising amount of execution time in UnsafeNativeMethods.GetSettingValue. It is even worse if we actually have an xml config file, looks like the xml file is read and parsed every time GetSettingValue is called. Perhaps this information could be determined only once and cached instead? Preferably in a way that enables lock free reads. I see it primarily when creating new instances of SQLiteConnection and in SQLiteConnection.Open. Open is twice as bad as SQLiteConnection.ctor since it redoes the work twice, once by calling ParseConnectionString and once by calling get_DefaultFlags.
mistachkin added on 2016-06-22 17:29:06:
This looks like a duplicate of [58ed318f2fadb5e0feff], which was fixed.
mistachkin added on 2016-06-22 17:32:34:
The frequently used settings are cached on a per-connection basis.
mistachkin added on 2016-06-22 17:42:59:
Access to the DefaultFlags setting can be disabled using NoDefaultFlags in the connection string. Access to the No_SQLiteConnectionNewParser setting can be disabled by setting the ParseViaFramework property of the connection prior to calling Open(); however, this may be problematic because the alternative connection string parsing algorithm exposed by the .NET Framework may not be entirely compatible.
mistachkin added on 2016-07-01 22:59:53:
I've attempted to improve this situation with check-in [7d50138407b6992b], now on trunk. Could you please test these changes in your environment and tell us if they improve the performance for your use case?
anonymous added on 2016-07-04 11:52:30:
Your changes improves things a little bit. Hadn't noticed No_SQLiteXmlConfigFile before, setting that makes the biggest difference. Sorry about that.