How to speedup file processing?
Tyro
ridimz at yahoo.com
Wed May 2 07:45:06 PDT 2007
Brad Anderson Wrote:
> 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
0.698 seconds to process 9286 records.
Tyro
More information about the Digitalmars-d-learn
mailing list