From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=0.5 required=5.0 tests=BAYES_00,TO_NO_BRKTS_PCNT autolearn=no autolearn_force=no version=3.4.4 X-Google-Thread: 103376,4fbd260da735f6f4,start X-Google-Attributes: gid103376,public X-Google-Language: ENGLISH,ASCII-7-bit Path: g2news1.google.com!news4.google.com!out03b.usenetserver.com!news.usenetserver.com!in02.usenetserver.com!news.usenetserver.com!cycny01.gnilink.net!spamkiller.gnilink.net!gnilink.net!trnddc01.POSTED!72fcb693!not-for-mail From: Fionn Mac Cumhaill Newsgroups: comp.lang.ada Subject: Reading and writing a big file in Ada (GNAT) on Windows XP Message-ID: <0hj5339mjmond132qhbn2o01unurs61lbj@4ax.com> X-Newsreader: Forte Agent 4.2/32.1117 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Date: Sat, 28 Apr 2007 05:03:48 GMT NNTP-Posting-Host: 71.170.31.60 X-Complaints-To: abuse@verizon.net X-Trace: trnddc01 1177736628 71.170.31.60 (Sat, 28 Apr 2007 01:03:48 EDT) NNTP-Posting-Date: Sat, 28 Apr 2007 01:03:48 EDT Xref: g2news1.google.com comp.lang.ada:15370 Date: 2007-04-28T05:03:48+00:00 List-Id: I have written a very simple program that runs on a Windows XP machine. (Pentium D , I don't remember the clock speed, it is in middle of Pentium D clock speeds, 2 Gb memory) It is compiled with the MinGW GNAT 3.4.5 Ada compiler. All it does is read lines in a loop from a text file with Ada.Text_IO.Get_Line, does minor modifications on about 80% of the lines that it reads, and writes the lines to an output file with Put_Line. The modifications consist of replacing a slice of text at the end of a line with another bit of text. The biggest slice is 10 characters, and the replacement slice is always smaller than the original slice. An occasional line of text is about 6000 characters long, but most are about 700 haracters. Get_Line reads them into a String variable that is 10,000 characters long. The problem is that the input file has more than 10 million lines of text in it. The program works perfectly, but takes about 5 hours to run. The Cygwin version of wc can count the lines in the input file in less than one minute. The program that produces the file pulls data from a SQL Server 7 running on an 800 MhZ Pentium III machine with 512 Mb and writes it to a file in 1-1/2 hours. Almost all (99.9%) of the lines are rows from a database table. Why is this so slow? Do I have an Ada problem, a GNAT problem, or a MinGW problem?