don't call ostream::write too often.
--- a/src/common/buffer.cc Wed Jan 27 12:09:07 2010 +0100
+++ b/src/common/buffer.cc Sun Jan 31 19:18:38 2010 +0100
@@ -39,6 +39,21 @@
#define HEURISTICS(x)
#endif
+namespace {
+
+static struct Zeroes
+{
+ Zeroes ()
+ : size (1000)
+ {
+ memset (buffer, 0, size);
+ }
+ char buffer[1000];
+ const uint32_t size;
+} g_zeroes;
+
+}
+
//#define PRINT_STATS 1
namespace ns3 {
@@ -694,10 +709,12 @@
{
size -= m_zeroAreaStart-m_start;
tmpsize = std::min (m_zeroAreaEnd - m_zeroAreaStart, size);
- char zero = 0;
- for (uint32_t i = 0; i < tmpsize; ++i)
+ uint32_t left = tmpsize;
+ while (left > 0)
{
- os->write (&zero, 1);
+ uint32_t toWrite = std::min (left, g_zeroes.size);
+ os->write (g_zeroes.buffer, toWrite);
+ left -= toWrite;
}
if (size > tmpsize)
{