On Mon, 04 Nov 2013, Sebastian Kulesz wrote: > On Mon, Nov 4, 2013 at 6:43 PM, Jussi Lahtinen > <jussi.lahti...@gmail.com>wrote: > > > Why not simply write benchmark? > > > > A benchmark wouldn't be accurate, as it will be IO bound, and being an old > machine, better reduce disk IO than CPU usage (I'm guessing it uses IDE > drives; which have low access time too). Besides, first option can fail if > you don't have write access to the file, thus needing a third access to > check for permission to delete. >
Yeah, may I throw in some related thought? I know you asked for the most efficient way to do it but your program should also be safe from race conditions, right? When you do ' Check for existance If Exist(sPath) Then Kill sPath or even ' Check for existance and write access using short-circuit If Exist(sPath) And If Stat(sPath).Auth Like "?w*" Then Kill sPath there is the risk (race condition) that sPath gets unlinked just at the point Gambas is passing the "Then" keyword. So the program might think that it is safe to remove the file without error check but the file just doesn't exist anymore when the program is ready to delete it. If you don't have a CATCH block in/above your function (or a Static Public Application_Error()), the interpreter will notice the error from the kernel and abort your program! Try Kill is always the safe way because you get an atomic error check here. Let's also consider what most probably happens at least under Linux when you have Try Kill sPath in Gambas (note that I didn't consult the real sources here, just guessing how it would be done): the interpreter will call the unlink() syscall which deletes the file or delivers an error. The error is propagated but suppressed by Try. With Exist(sPath) Then Kill sPath, the interpreter likely executes something like access() which can equivalently well fail or succeed. If it succeeds you still have to do the same unlink() operation. So, the best case you can get is that Exist() is false. Then the running time is roughly access() vs. unlink(). In all other cases, the Try Kill approach seems to be faster and safer, too. You have to decide now: Do you expect sPath non-existing most of the time? Do you want to ignore race conditions in favour of performance? Then use the If Exist(...) Then Kill ... method. Regards, Tobi -- "There's an old saying: Don't change anything... ever!" -- Mr. Monk ------------------------------------------------------------------------------ November Webinars for C, C++, Fortran Developers Accelerate application performance with scalable programming models. Explore techniques for threading, error checking, porting, and tuning. Get the most from the latest Intel processors and coprocessors. See abstracts and register http://pubads.g.doubleclick.net/gampad/clk?id=60136231&iu=/4140/ostg.clktrk _______________________________________________ Gambas-user mailing list Gambas-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/gambas-user