有效地写入文件

时间:2015-05-26 04:07:56

标签: c++ optimization io

在下面的代码中使用fprintf比使用fprintf更有效。我正在为成千上万的文件执行此代码,瓶颈是写入文件。该文件不一定必须是人类可读的。我曾尝试用sprintf语句替换我的fprintf语句,然后在最后执行一个fprintf将字符串写入文件。

source 'https://rubygems.org'
gem 'rails', '3.2.19'
gem 'sqlite3'
group :assets do
  gem 'sass-rails',   '~> 3.2.3'
  gem 'coffee-rails', '~> 3.2.1'
  gem 'uglifier', '>= 1.0.3'
end
gem 'jquery-rails'
gem 'wicked_pdf'
gem 'wkhtmltopdf-binary'

3 个答案:

答案 0 :(得分:2)

你说:

  

该文件不一定必须是人类可读的

在这种情况下,请使用二进制格式。使用fwrite写入数据,使用fread读取数据。

根据我的经验,你可以从几个方面获​​得表现:

  1. 无需进行格式转换。
  2. 文件的大小较小。需要传输到磁盘并保存在磁盘上的字节数较少。
  3. 谨慎提醒(感谢@JerryCoffin):

    执行此操作时,数据的可移植性会降低 - 例如,在小端机器上写入的数据需要转换才能在大端机器上读取。只要你只是在同一台机器上保存和恢复数据,这很少是一个问题。

答案 1 :(得分:0)

moments_rank [4]< 4,然后你退出而不关闭文件。除此之外,即使你是fstream并使用write方法而不是运算符<<也很有效率。尝试基准测试并查看。

答案 2 :(得分:0)

有三种可能性 - 您需要进行一些实际测量才能看出哪些适用:

1)I / O几乎一直在进行,在这种情况下检查您是否可以从更大的缓冲区(setvbuf)获得任何改进;我们可以看到你不会在任何不必要的地方冲洗;可能,考虑更紧密的文件格式和/或压缩和/或更快的驱动器/ RAID和/或写入更少的大文件,如果它们小到足以效率低(例如几十千字节)并且仍然适合他们以后的使用。

2)代码几乎占用了所有时间,在这种情况下,您可以尝试跨线程分发和/或使用二进制格式来减少转换

3)他们都很重要,在这种情况下尝试上述

的任何组合