System.Data.SQLite

Login
This project makes use of Eagle, provided by Mistachkin Systems.
Eagle: Secure Software Automation
2016-07-08
01:20 Closed ticket [25d53b48f6]: Surprsing amount of time spent in UnsafeNativeMethods.GetSettingsValue plus 2 other changes artifact: fa6999dbe1 user: mistachkin
2016-07-04
11:52 Ticket [25d53b48f6]: 3 changes artifact: f51fc4c540 user: anonymous
2016-07-01
22:59 Ticket [25d53b48f6]: 4 changes artifact: 106586f05e user: mistachkin
22:58
Attempt to limit the number of times GetSettingValue is called from the SQLiteConnection class. Pursuant to ticket [25d53b48f6]. check-in: 7d50138407 user: mistachkin tags: trunk
22:11 Pending ticket [25d53b48f6]: Surprsing amount of time spent in UnsafeNativeMethods.GetSettingsValue plus 3 other changes artifact: 155274bb44 user: mistachkin
2016-06-22
17:42 Ticket [25d53b48f6]: 3 changes artifact: 6cfba2bd7b user: mistachkin
17:34 Verified ticket [25d53b48f6]. artifact: 1789263d30 user: mistachkin
17:32 Ticket [25d53b48f6]: 3 changes artifact: bb2af4bb24 user: mistachkin
17:29 Ticket [25d53b48f6]: 6 changes artifact: 525dbc385b user: mistachkin
09:58 New ticket [25d53b48f6]. artifact: 88118c5b42 user: anonymous

Ticket Hash: 25d53b48f6f26c523fd8aa9f5be48b43e13e8287
Title: Surprsing amount of time spent in UnsafeNativeMethods.GetSettingsValue
Status: Closed Type: Performance
Severity: Minor Priority: Medium
Subsystem: Connection Resolution: Fixed
Last Modified: 2016-07-08 01:20:56
Version Found In: 1.0.99
User Comments:
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.