fstream.write有时需要太长时间

时间:2017-03-20 09:10:36

标签: c++ fstream

MP4V2使用fstream.write将h264数据写入mp4file到SD卡,每次大约1200KB~1300KB的数据。请参阅以下代码:

struct timeval tv_begin, tv_end;
long int begin = 0, end = 0;
bool
StandardFileProvider::write( const void* buffer, Size size, Size& nout, Size maxChunkSize )
{
    gettimeofday(&tv_begin, NULL);
    _fstream.write( (const char*)buffer, size );
    if( _fstream.fail() )
        return true;
    nout = size;
    _fstream.sync();
    _fstream.flush();

    gettimeofday(&tv_end, NULL);
    begin = tv_begin.tv_sec*1000*1000 + tv_begin.tv_usec;
    end   = tv_end.tv_sec*1000*1000 + tv_end.tv_usec;
    printf("%s:%d sync -> time : %3ld.%03ld ms. wsize = %8lld Kb\n"
           ,__func__, __LINE__, (end - begin)/1000, (end - begin)%1000, size/1024);
    return false;
}

这是日志:

  

时间:14.619毫秒。 wsize = 1247 KB
  时间:15.806毫秒。 wsize = 1234 KB
  时间:14.381毫秒。 wsize = 1244 KB
  时间:15.080毫秒。 wsize = 1243 KB
  时间:38.409毫秒。 wsize = 1245 KB
  时间:22.609毫秒。 wsize = 1243 KB
  时间:18.856毫秒。 wsize = 1257 KB
  时间:30.591毫秒。 wsize = 1230 KB
  时间:16.019毫秒。 wsize = 1247 KB
  时间:14.925毫秒。 wsize = 1251 KB
  时间:15.050毫秒。 wsize = 1233 KB
  时间:466.793毫秒。 wsize = 1230 KB
  时间:17.810毫秒。 wsize = 1232 KB
  时间:14.422毫秒。 wsize = 1231 KB
  时间:15.803毫秒。 wsize = 1221 KB
  时间:14.874毫秒。 wsize = 1248 KB
  时间:27.504毫秒。 wsize = 1232 KB
  时间:14.615毫秒。 wsize = 1250 KB
  时间:15.394毫秒。 wsize = 1240 KB
  时间:33.018毫秒。 wsize = 1234 KB
  时间:15.506毫秒。 wsize = 1255 KB
  时间:15.890毫秒。 wsize = 1256 KB
  时间:26.371毫秒。 wsize = 1251 KB
  时间:15.305毫秒。 wsize = 1245 KB
  时间:22.000毫秒。 wsize = 1240 KB
  时间:23.760毫秒。 wsize = 1244 KB
  时间:19.326毫秒。 wsize = 1254 KB
  时间:46.0​​03毫秒。 wsize = 1252 KB
  时间:15.997毫秒。 wsize = 1240 KB
  时间:14.518毫秒。 wsize = 1242 KB

为什么使用466.793 ms ??

1 个答案:

答案 0 :(得分:0)

我已经解决了这个问题!

这是vfs问题。我只是将dirty_ratio从20设置为5,它将起作用。

[root@elvis-g1_0:~]# cat /proc/sys/vm/dirty_ratio 20 [root@elvis-g1_0:~]# echo 5 > /proc/sys/vm/dirty_ratio