How to speedup file processing?
Brad Anderson
brad at dsource.org
Wed May 2 07:03:25 PDT 2007
Tyro wrote:
> Brad Anderson Wrote:
>
>> Tyro wrote:
>>> Good day all,
>>>
>>> running the below code snippet against a 800Kb file takes an ungodly
>>> amount of time (anywhere from 25 to 35 minutes). Is there anything
>>> I can do to speed the process up?
>>>
>>> // Load ID Standards File if no db exists
>>> char[] idfile = cast(char[])read("idfile.ids");
>>>
>>> while(idfile.length)
>>> {
>>> //Avoid utf-8 Error message. Ideal situation would be to
>>> //display the contents as it appears in the file but I'm
>>> // unsure how to accomplish that.
>>> if(!isascii(idfile[11])) {
>>> idfile = idfile[80..$];
>>> continue;
>>> }
>>>
>>> db.exec("INSERT INTO idstd
>>> values( null,
>>> '"~idfile[0..6]~"', '"~ idfile[6..11] ~"',
>>> '"~ idfile[11..24] ~"', '"~ idfile[24..38] ~"',
>>> '"~ idfile[38..40] ~"', '"~ idfile[40..42] ~"',
>>> '"~ idfile[42..43] ~"', '"~ idfile[43..44] ~"'
>>> )");
>>> idfile = idfile[80..$];
>>> }
>> You might be better off making a file tailored specifically for your db's bulk
>> copy program and using that. I suspect your issue is all the inserts, not the
>> processing of your code. Bulk copy usually turns off any logging during the
>> one huge insert, so that helps as well.
>>
>> BA
>
> Thanks Brad,
>
> Following that explanation I did some googleing and came up with the solution below:
>
> db.exec("BEGIN");
> // Insert while loop here
> db.exec("COMMIT");
ok, setting up a transaction.
>
> This led me to an arrayBounds Error on line 199 of sqlite_oo which happens to be the fetch() originally implemented as such:
Hmm, sqlite... not sure of a bulk-load facility there. I have more experience
w/ MSSQL, PGSQL, and MySQL
>
> public char[][] fetch()
> {
> return data[rowCursor++];
> }
>
> After reimplemening it as:
>
> public char[][] fetch()
> {
> if(rowCursor < data.length)
> return data[rowCursor++];
> else
> return null;
> }
>
> The program compiles and runs correctly.
Cool. How fast?
BA
More information about the Digitalmars-d-learn
mailing list