关于文件 IO 的效率
测试 Ubuntu 和 Windows10 时使用的是同一台电脑,但 NOI Linux 用的是另一台。
输入
Ubuntu
|
\(2 \times 10^7\) 个 int |
\(10^7\) 个 double |
\(10^8\) 个 char |
cin |
\(3002 \text{ms}\) |
\(3181 \text{ms}\) |
\(1786 \text{ms}\) |
cin 取消同步 |
\(921 \text{ms}\) |
\(1275 \text{ms}\) |
\(597 \text{ms}\) |
cin 取消绑定 |
\(920 \text{ms}\) |
\(1278 \text{ms}\) |
\(449 \text{ms}\) |
cin 取消同步、绑定 |
\(921 \text{ms}\) |
\(1267 \text{ms}\) |
\(449 \text{ms}\) |
ifstream |
\(920 \text{ms}\) |
\(1261 \text{ms}\) |
\(470 \text{ms}\) |
scanf |
\(840 \text{ms}\) |
\(921 \text{ms}\) |
\(1322 \text{ms}\) |
getchar |
\(300 \text{ms}\) |
-- |
\(160 \text{ms}\) |
ifstream::get |
\(651 \text{ms}\) |
-- |
\(366 \text{ms}\) |
Windows 10
|
\(2 \times 10^6\) 个 int |
\(10^6\) 个 double |
\(2 \times 10^7\) 个 char |
cin |
\(2010 \text{ms}\) |
\(3497 \text{ms}\) |
\(1462 \text{ms}\) |
cin 取消同步 |
\(311 \text{ms}\) |
\(2357 \text{ms}\) |
\(209 \text{ms}\) |
cin 取消绑定 |
\(303 \text{ms}\) |
\(2359 \text{ms}\) |
\(160 \text{ms}\) |
cin 取消同步、绑定 |
\(302 \text{ms}\) |
\(2352 \text{ms}\) |
\(164 \text{ms}\) |
ifstream |
\(311 \text{ms}\) |
\(2340 \text{ms}\) |
\(163 \text{ms}\) |
scanf |
\(836 \text{ms}\) |
\(819 \text{ms}\) |
\(1589 \text{ms}\) |
getchar |
\(344 \text{ms}\) |
-- |
\(360 \text{ms}\) |
ifstream::get |
\(151 \text{ms}\) |
-- |
\(141 \text{ms}\) |
NOI Linux
|
\(5 \times 10^6\) 个 int |
\(5 \times 10^6\) 个 double |
\(4 \times 10^7\) 个 char |
cin |
\(2094 \text{ms}\) |
\(2878 \text{ms}\) |
\(1766 \text{ms}\) |
cin 取消同步 |
\(621 \text{ms}\) |
\(1240 \text{ms}\) |
\(694 \text{ms}\) |
cin 取消绑定 |
\(552 \text{ms}\) |
\(1221 \text{ms}\) |
\(534 \text{ms}\) |
cin 取消同步、绑定 |
\(532 \text{ms}\) |
\(1212 \text{ms}\) |
\(549 \text{ms}\) |
ifstream |
\(552 \text{ms}\) |
\(1231 \text{ms}\) |
\(514 \text{ms}\) |
scanf |
\(642 \text{ms}\) |
\(914 \text{ms}\) |
\(1372 \text{ms}\) |
getchar |
\(243 \text{ms}\) |
-- |
\(168 \text{ms}\) |
ifstream::get |
\(470 \text{ms}\) |
-- |
\(357 \text{ms}\) |
输出
Ubuntu
|
\(5 \times 10^6\) 个 int |
\(2 \times 10^6\) 个 double |
\(5 \times 10^6\) 个 char |
cout(endl) |
\(3892 \text{ms}\) |
\(2227 \text{ms}\) |
\(3767 \text{ms}\) |
cout('\n') |
\(211 \text{ms}\) |
\(566 \text{ms}\) |
\(121 \text{ms}\) |
cout(endl) 取消同步 |
\(3905 \text{ms}\) |
\(2201 \text{ms}\) |
\(3651 \text{ms}\) |
cout('\n') 取消同步 |
\(196 \text{ms}\) |
\(544 \text{ms}\) |
\(97 \text{ms}\) |
ofstream(endl) |
\(3850 \text{ms}\) |
\(2168 \text{ms}\) |
\(3642 \text{ms}\) |
ofstream('\n') |
\(185 \text{ms}\) |
\(548 \text{ms}\) |
\(95 \text{ms}\) |
printf |
\(199 \text{ms}\) |
\(655 \text{ms}\) |
\(101 \text{ms}\) |
putchar |
\(145 \text{ms}\) |
-- |
\(21 \text{ms}\) |
ofstream::put |
\(270 \text{ms}\) |
-- |
\(45 \text{ms}\) |
|
\(2 \times 10^7\) 个 int |
\(5 \times 10^6\) 个 double |
\(5 \times 10^7\) 个 char |
cout('\n') |
\(832 \text{ms}\) |
\(1409 \text{ms}\) |
\(1210 \text{ms}\) |
cout('\n') 取消同步 |
\(764 \text{ms}\) |
\(1360 \text{ms}\) |
\(984 \text{ms}\) |
ofstream('\n') |
\(738 \text{ms}\) |
\(1647 \text{ms}\) |
\(931 \text{ms}\) |
printf |
\(791 \text{ms}\) |
\(1592 \text{ms}\) |
\(982 \text{ms}\) |
putchar |
\(578 \text{ms}\) |
-- |
\(195 \text{ms}\) |
ofstream::put |
\(1017 \text{ms}\) |
-- |
\(434 \text{ms}\) |
Windows10
|
\(10^6\) 个 int |
\(5 \times 10^5\) 个 double |
\(2 \times 10^6\) 个 char |
cout(endl) |
\(2869 \text{ms}\) |
\(1946 \text{ms}\) |
\(5513 \text{ms}\) |
cout('\n') |
\(100 \text{ms}\) |
\(376 \text{ms}\) |
\(99 \text{ms}\) |
cout(endl) 取消同步 |
\(2796 \text{ms}\) |
\(1895 \text{ms}\) |
\(5418 \text{ms}\) |
cout('\n') 取消同步 |
\(178 \text{ms}\) |
\(443 \text{ms}\) |
\(98 \text{ms}\) |
ofstream(endl) |
\(2781 \text{ms}\) |
\(1893 \text{ms}\) |
\(5648 \text{ms}\) |
ofstream('\n') |
\(166 \text{ms}\) |
\(440 \text{ms}\) |
\(103 \text{ms}\) |
printf |
\(209 \text{ms}\) |
\(455 \text{ms}\) |
\(138 \text{ms}\) |
putchar |
\(202 \text{ms}\) |
-- |
\(88 \text{ms}\) |
ofstream::put |
\(125 \text{ms}\) |
-- |
\(62 \text{ms}\) |
|
\(5 \times 10^6\) 个 int |
\(10^6\) 个 double |
\(10^7\) 个 char |
cout('\n') |
\(439 \text{ms}\) |
\(752 \text{ms}\) |
\(475 \text{ms}\) |
cout('\n') 取消同步 |
\(874 \text{ms}\) |
\(904 \text{ms}\) |
\(493 \text{ms}\) |
ofstream('\n') |
\(841 \text{ms}\) |
\(895 \text{ms}\) |
\(547 \text{ms}\) |
printf |
\(997 \text{ms}\) |
\(922 \text{ms}\) |
\(695 \text{ms}\) |
putchar |
\(963 \text{ms}\) |
-- |
\(424 \text{ms}\) |
ofstream::put |
\(600 \text{ms}\) |
-- |
\(226 \text{ms}\) |
NOI Linux
|
\(2 \times 10^6\) 个 int |
\(10^6\) 个 double |
\(4 \times 10^6\) 个 char |
cout(endl) |
\(5912 \text{ms}\) |
\(4363 \text{ms}\) |
\(11246 \text{ms}\) |
cout('\n') |
\(323 \text{ms}\) |
\(830 \text{ms}\) |
\(254 \text{ms}\) |
cout(endl) 取消同步 |
\(5872 \text{ms}\) |
\(4401 \text{ms}\) |
\(11056 \text{ms}\) |
cout('\n') 取消同步 |
\(194 \text{ms}\) |
\(841 \text{ms}\) |
\(192 \text{ms}\) |
ofstream(endl) |
\(5729 \text{ms}\) |
\(4308 \text{ms}\) |
\(11054 \text{ms}\) |
ofstream('\n') |
\(200 \text{ms}\) |
\(823 \text{ms}\) |
\(190 \text{ms}\) |
printf |
\(237 \text{ms}\) |
\(1217 \text{ms}\) |
\(227 \text{ms}\) |
putchar |
\(184 \text{ms}\) |
-- |
\(58 \text{ms}\) |
ofstream::put |
\(268 \text{ms}\) |
-- |
\(86 \text{ms}\) |
|
\(10^7\) 个 int |
\(2 \times 10^6\) 个 double |
\(2 \times 10^7\) 个 char |
cout('\n') |
\(1254 \text{ms}\) |
\(1680 \text{ms}\) |
\(1249 \text{ms}\) |
cout('\n') 取消同步 |
\(1011 \text{ms}\) |
\(1647 \text{ms}\) |
\(961 \text{ms}\) |
ofstream('\n') |
\(1016 \text{ms}\) |
\(1649 \text{ms}\) |
\(965 \text{ms}\) |
printf |
\(1197 \text{ms}\) |
\(2415 \text{ms}\) |
\(1132 \text{ms}\) |
putchar |
\(963 \text{ms}\) |
-- |
\(273 \text{ms}\) |
ofstream::put |
\(1344 \text{ms}\) |
-- |
\(424 \text{ms}\) |
结论
- Ubuntu 和 NOI Linux 的测试结果差不多
毕竟 NOI Linux 就是魔改的 Ubuntu,而 Windows10 的测试结果看起来很玄学。
cin/cout 最好取消同步和绑定。
- 文件 IO 用
freopen+cin/cout 或 ifstream/ofstream 均可。
- 如果想要更快的 IO,可以使用
getchar/putchar。