![]() |
1
2
如上述评论所述,如果
但是,您可以做一些事情,这些事情可能适用于您的情况,也可能不适用于您的情况。 如果数组的生成发生在时间关键区域之外,则生成该数组,或者使用字符串而不是整数生成数组的副本。用我对10000个整数的小测试,这大约快了5倍。
如果你同时控制阅读和写作过程,那么使用
我希望这些数字在Ruby的每个版本中都会有所不同,所以值得检查您的特定目标版本。 |
![]() |
2
3
如果要将整数打印到stdout,则需要首先将其转换为字符串,因为这是stdout所能理解的全部内容。如果要将两个整数打印到stdout,则需要首先将它们都转换为字符串。如果要将三个整数打印到stdout,则需要首先将它们全部转换为字符串。如果要将10亿个整数打印到stdout,首先需要将10亿个整数全部转换为字符串。 你,我们,或者Ruby,或者任何编程语言都不能做到这一点。 您可以尝试通过执行懒惰的流实现将转换与I/O交错。您可以尝试并行执行转换和I/O,方法是执行一个延迟流实现,并将转换和I/O分离为两个单独的线程。(一定要使用Ruby实现,它实际上可以 执行 并行线程,并非所有线程都可以:例如,mri、yarv和rubinius不能。) 您可以通过并行地在单独的线程中转换数组中的单独块来并行转换。你甚至可以购买十亿个核心机器,同时并行转换所有十亿个整数。
但即便如此,问题仍然存在:每个整数都需要转换。无论你是先一个接一个地做,然后打印它们,还是一个接一个地与I/O交错,或者一个接一个地与I/O并行,或者甚至在十亿个核心CPU上同时转换它们:所需转换的数量不会神奇地减少。大量的整数意味着大量的转换。即使在10亿个核心CPU中并行进行10亿次转换,
仍然
十亿次转换,即十亿次呼叫
|
![]() |
3
0
你的进度慢不是因为
|
![]() |
4
0
对于单个数字,您可以这样做
如果你需要加速更大的数字,你可以尝试记忆
|
![]() |
5
0
除非您真的需要查看控制台上的数字(听起来您不需要),否则将它们以二进制的形式写入一个文件——应该要快得多。 如果您需要这样做,您可以将二进制文件导入其他程序,而不仅仅是文本。 |
![]() |
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 5 月前 |
![]() |
bairog · 从按属性筛选的对象数组字典中创建值数组 5 月前 |
![]() |
Anka Hanım · 关于结构和动态数组地址的问题 5 月前 |
![]() |
Geremia · 2D NumPy数组+1D数组? 5 月前 |
![]() |
MARTIN · 交换第一个和最后一个单词,反转所有中间的字符 6 月前 |
![]() |
Paul Williams · 迭代数组时输出有问题 6 月前 |