fork download
  1. #include <iostream>
  2. #include <fstream>
  3. #include <sstream>
  4. #include <string>
  5. #include <chrono>
  6.  
  7. using namespace std;
  8. using namespace std::chrono;
  9.  
  10. // Temp loger
  11. class Log
  12. {
  13. public:
  14. virtual ~Log();
  15. std::ostringstream& Get();
  16. protected:
  17. std::ostringstream os;
  18. };
  19. std::ostringstream& Log::Get() { return os; }
  20. Log::~Log()
  21. {
  22. ofstream ofs("log1", ios::ate);
  23. ofs << os.str();
  24. }
  25.  
  26. // perm logger
  27. class Log2
  28. {
  29. public:
  30. Log2();
  31. virtual ~Log2();
  32. std::ofstream& Get();
  33. protected:
  34. std::ofstream os;
  35. };
  36. std::ofstream& Log2::Get() { return os; }
  37. Log2::~Log2() { }
  38. Log2::Log2() : os("log2") { }
  39.  
  40. int main()
  41. {
  42. const int N = 100000;
  43.  
  44. time_point<high_resolution_clock> t0 = high_resolution_clock::now();
  45. {
  46. for(int i = 0; i < N; i++)
  47. Log().Get() << "Log record " << i << endl;
  48. }
  49. time_point<high_resolution_clock> t1 = high_resolution_clock::now();
  50. {
  51. Log2 logger;
  52. for(int i = 0; i < N; i++)
  53. logger.Get() << "Log record " << i << endl;
  54. }
  55. time_point<high_resolution_clock> t2 = high_resolution_clock::now();
  56. cout << "Temp logger:" << duration_cast<milliseconds>(t1 - t0).count() << " millisecs" << endl;
  57. cout << "Perm logger:" << duration_cast<milliseconds>(t2 - t1).count() << " millisecs" << endl;
  58. cin.get();
  59. }
Success #stdin #stdout 0.52s 3472KB
stdin
Standard input is empty
stdout
Temp logger:510 millisecs
Perm logger:11 millisecs