On Thursday, 21 June 2012 at 17:14:34 UTC, Regan Heath wrote:
On Thu, 21 Jun 2012 14:56:37 +0100, Paul <phshaf...@gmail.com>
wrote:
I wrote a program that parses a text file and writes results
as it is processing the file (i.e. many writeln()'s). On my
local harddrive it works fine. When I later used it on a file
located on a file server, it went from 500ms to 1 minute
processing time.
It there a more efficient way to write out the results that
would say maybe only access the harddrive as it closes the
connection...or somesuch?
Thanks for your assistance.
I imagine writeln is synchronous/non-overlapped IO. Meaning,
the call to writeln doesn't return until the write has
"completed". So, on every call you're basically waiting for
the network IO to complete before you process something else
locally.
Isn't the most simple approach then to build up the whole file in
memory as a single string, using \n and then do a single write
across the network ?
like:
void main(string args[]){
string filecontent = "";
filecontent ~= "#include std.stdio\n";
filecontent ~= "int x = " ~ x ~ ";\n";
//etc etc...
auto f = new File("X:\\MyNetworkDir\\file.txt");
f.writeln(filecontent);
f.close();
}
Haven't tested the code, but if network IO is the wait, then just
increase the buffer..