[ https://issues.apache.org/jira/browse/STDCXX-231?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Martin Sebor updated STDCXX-231: -------------------------------- Severity: Inefficiency Affects Version/s: 4.1.2 4.1.3 4.1.4 4.2.0 Fix Version/s: 4.2.1 Affects all released versions. Let's try to look into speeding this up in 4.2.1. > std::getline from <string> header is rather slow > ------------------------------------------------ > > Key: STDCXX-231 > URL: https://issues.apache.org/jira/browse/STDCXX-231 > Project: C++ Standard Library > Issue Type: Improvement > Components: 21. Strings > Affects Versions: 4.1.2, 4.1.3, 4.1.4, 4.2.0 > Reporter: Martin Sebor > Fix For: 4.2.1 > > > Moved from the Rogue Wave bug tracking database: > ****Created By: leroy @ Jan 25, 2001 03:20:01 PM**** > Environment > Compiler : SUNPRO 4.2 > OS : Solaris 2.5.1 > SCL : 1.3.0 (Summer-1999) > Tools : 7.1.0 (Summer-1999) --> Use only for RWBench > Command line option : > for debug : > CC -xildoff +w +p -g -o Test_dbg.exe test.cc -DRWDEBUG=1 > -I/opt/RogueWave/Summer-1999/workspaces/SOLARIS251/SUNPRO42/11s > -I/opt/RogueWave/Summer-1999/workspaces/SOLARIS251/SUNPRO42/11s/include -I. > -L/opt/RogueWave/Summer-1999/workspaces/SOLARIS251/SUNPRO42/11s/lib -Bstatic > -ltls11s -lstd11s -Bdynamic > for release : > CC -xildoff +w +p -fast -o Test_release.exe test.cc > -I/opt/RogueWave/Summer-1999/workspaces/SOLARIS251/SUNPRO42/8s > -I/opt/RogueWave/Summer-1999/workspaces/SOLARIS251/SUNPRO42/8s/include -I. > -L/opt/RogueWave/Summer-1999/workspaces/SOLARIS251/SUNPRO42/8s/lib -Bstatic > -ltls8s -lstd8s -Bdynamic > (Uploaded file: 997149-test.cc) > > > > > > **** Entered By: Web @ Thursday, January 25, 2001 2:41:42 AM **** > Location of uploaded file: > http://thoth.bco.roguewave.com/uploads/997149-test.cc > View all uploaded files for this incident: > http://webdev.roguewave.com/admin/tsvw/index.cfm?IncidentID=997149 > > > > > > > > > > > > > > > **** Entered By: Web @ Thursday, January 25, 2001 2:44:56 AM **** > #web > Please find my test case at the end of the note > Environment > Compiler : SUNPRO 4.2 > OS : Solaris 2.5.1 > SCL : 1.3.0 (Summer-1999) > Tools : 7.1.0 (Summer-1999) --> Use only for RWBench > Command line option : > for debug : > CC -xildoff +w +p -g -o Test_dbg.exe test.cc -DRWDEBUG=1 > -I/opt/RogueWave/Summer-1999/workspaces/SOLARIS251/SUNPRO42/11s > -I/opt/RogueWave/Summer-1999/workspaces/SOLARIS251/SUNPRO42/11s/include -I. > -L/opt/RogueWave/Summer-1999/workspaces/SOLARIS251/SUNPRO42/11s/lib -Bstatic > -ltls11s -lstd11s -Bdynamic > for release : > CC -xildoff +w +p -fast -o Test_release.exe test.cc > -I/opt/RogueWave/Summer-1999/workspaces/SOLARIS251/SUNPRO42/8s > -I/opt/RogueWave/Summer-1999/workspaces/SOLARIS251/SUNPRO42/8s/include -I. > -L/opt/RogueWave/Summer-1999/workspaces/SOLARIS251/SUNPRO42/8s/lib -Bstatic > -ltls8s -lstd8s -Bdynamic > #Code > #include <string> > #include <fstream.h> > #include <iostream.h> > #include <rw/bench.h> > > > class std_string_getline : public RWBench > { > public: > std_string_getline() {;} > > void doLoop(unsigned long n); > void idleLoop(unsigned long n); > void what(ostream& os) const { os << "Standard String Getline : " << endl;} > }; > > class classic_getline : public RWBench > { > public: > classic_getline() {;} > > void doLoop(unsigned long n); > void idleLoop(unsigned long n); > void what(ostream& os) const { os << "Classic Getline : " << endl;} > }; > > int > main(int argc, char** argv) > { > > std_string_getline test_std_string; > test_std_string.parse(argc, argv); > test_std_string.go(); > test_std_string.report(cout); > > classic_getline test_classic_getline; > test_classic_getline.parse(argc, argv); > test_classic_getline.go(); > test_classic_getline.report(cout); > } > > void > std_string_getline::doLoop(unsigned long n) > { > while (n--) > { > ifstream toRead(__FILE__); > string line; > line.reserve(512); > > while (!(toRead.eof())) > { > getline(toRead, line, '\n'); > } > } > } > > void > std_string_getline::idleLoop(unsigned long n) > { > while (n--) > { > ifstream toRead(__FILE__); > string line; > line.reserve(512); > } > } > > void > classic_getline::doLoop(unsigned long n) > { > while (n--) > { > ifstream toRead(__FILE__); > char cLine[512]; > string line; > line.reserve(512); > > while (!(toRead.eof())) > { > toRead.getline(cLine, 512); > line = cLine; > } > } > } > > void > classic_getline::idleLoop(unsigned long n) > { > while (n--) > { > ifstream toRead(__FILE__); > char cLine[512]; > string line; > line.reserve(512); > } > } > #EndCode > There appears to be something to this. I ran the program and here is the > output: > Sun C++ > Standard String Getline : > Iterations: 1 > Inner loop operations: 1000 > Total operations: 1000 > Elapsed (user) time: 18.18 > Operations per second: 55.0055 > Sun C++ > Classic Getline : > Iterations: 5 > Inner loop operations: 1000 > Total operations: 5000 > Elapsed (user) time: 4.67 > Kilo-operations per second: 1.07066 -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.