Jtssi Posted April 26, 2023 Share Posted April 26, 2023 Hello, I have created functions similar to INI files, and I would like to know how to optimize the code. Do you have any ideas? Thank you. Func _DbWrite_($db_file,$db_table,$db_key,$db_value) _SQLite_Startup() Local $db_query $db_open = _SQLite_Open($db_file) _SQLite_Exec($db_open,'CREATE TABLE IF NOT EXISTS "' & $db_table & '" (key,value);') _SQLite_QuerySingleRow($db_open,'SELECT key FROM "' & $db_table & '" WHERE key="' & $db_key & '";',$db_query) If $db_query[0] == "" Then _SQLite_Exec($db_open,'INSERT INTO "' & $db_table & '" VALUES ("' & $db_key & '","' & $db_value & '");') Else _SQLite_Exec($db_open,'UPDATE "' & $db_table & '" SET value="' & $db_value & '" WHERE key="' & $db_key & '";') EndIf _SQLite_Close($db_open) _SQLite_Shutdown() EndFunc Func _DbRead_($db_file,$db_table,$db_key,$db_value) _SQLite_Startup() Local $db_query $db_open = _SQLite_Open($db_file) _SQLite_Exec($db_open,'CREATE TABLE IF NOT EXISTS "' & $db_table & '" (key,value);') _SQLite_QuerySingleRow($db_open,'SELECT value FROM "' & $db_table & '" WHERE key="' & $db_key & '";',$db_query) _SQLite_Close($db_open) If $db_query[0] == "" Then Return $db_value Else Return $db_query[0] EndIf _SQLite_Shutdown() EndFunc Link to comment Share on other sites More sharing options...
argumentum Posted April 26, 2023 Share Posted April 26, 2023 ..ok. don't _SQLite_Startup() and _SQLite_Shutdown() all the time. Do it at the start of the script and save time. Same with the database. Unless you'd like to share this with other scripts in which case, use an IPC ( there are some examples in the link ). Follow the link to my code contribution ( and other things too ). FAQ - Please Read Before Posting. Link to comment Share on other sites More sharing options...
mistersquirrle Posted April 26, 2023 Share Posted April 26, 2023 Keep in mind the overhead with SQLite calls from AutoIt. You're calling the DLL to do stuff in SQL, get data back and do something with it. It's a lot easier to read an ini file. Here's your posted version comparison: [================= Run progress, 10,000 times * 2 functions ===================] +———————————————+—————————————————+———————————————+——————————————+—————————————+ | Function Name | Time Taken (ms) | Avg Time (ms) | Std Dev (ms) | Faster By % | +———————————————+—————————————————+———————————————+——————————————+—————————————+ +| IniRead | 681.45 | 0.0681 | 0.0180 | 94.97 | | _DbRead_ | 13559.59 | 1.3560 | 0.2351 | 0.00 | +———————————————+—————————————————+———————————————+——————————————+—————————————+ And with @argumentum's suggestion of only doing [StartUp and Shutdown], [Open and Close] once: [================= Run progress, 10,000 times * 2 functions ===================] +———————————————+—————————————————+———————————————+——————————————+—————————————+ | Function Name | Time Taken (ms) | Avg Time (ms) | Std Dev (ms) | Faster By % | +———————————————+—————————————————+———————————————+——————————————+—————————————+ +| IniRead | 760.12 | 0.0760 | 0.0265 | 87.07 | | _DbRead_2 | 5878.42 | 0.5878 | 0.1161 | 0.00 | +———————————————+—————————————————+———————————————+——————————————+—————————————+ So, if all you're after is a couple of basic configuration options, I'd recommend sticking with a .ini file. If they're options that don't need to be constantly written/read, SQLite can work fine for getting options once at the start of the script, though you should probably create a function to get a whole 'section' of values at once, instead of one by one. argumentum 1 We ought not to misbehave, but we should look as though we could. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now