我需要一种更快捷的方式将160万位BigInteger输出到文件中。我现在正在使用此代码。
FileStream fs1 = new FileStream("C:\\Output\\Final\\BigInteger.txt", FileMode.OpenOrCreate, FileAccess.Write);
StreamWriter writer = new StreamWriter(fs1);
writer.WriteLine(big);
writer.Close();
输出160万位数字大约需要5分钟。有什么方法可以加快速度吗?
答案 0 :(得分:5)
这是一个非常愚蠢的问题,没有实际用途。但确切地知道处理器周期的使用位置始终很重要。你抱怨写一个文件花了太长时间。那么,你确定实际上文件慢吗?或者它是BigInteger.ToString()那么慢?
最好的方法就是写文件,这样你就可以解决问题:
using System;
using System.Text;
using System.IO;
class Program {
static void Main(string[] args) {
var big = new StringBuilder(1600 * 1000);
big.Append('0', big.Capacity);
var sw = System.Diagnostics.Stopwatch.StartNew();
// Your code here
FileStream fs1 = new FileStream("BigInteger.txt", FileMode.OpenOrCreate, FileAccess.Write);
StreamWriter writer = new StreamWriter(fs1);
writer.WriteLine(big);
writer.Close();
// End of your code
sw.Stop();
Console.WriteLine("That took {0} milliseconds", sw.ElapsedMilliseconds);
Console.ReadLine();
}
}
我机器上的输出:
That took 13 milliseconds
编写文件非常快,文件系统缓存使其成为内存到内存的副本。在程序停止运行很久之后,操作系统会懒惰地将其写入磁盘。当您写入的数据超出缓存容量时,它只能隐藏慢速磁盘写入速度。你在任何现代机器上都不是那么接近,它们有很多内存并且可以轻松存储千兆字节。 1.6兆字节是牙线。
所以你知道它实际上是BigInteger.ToString()这么慢。是的。它将Big Mother存储在base 2中,使数学尽可能快。像base 2这样的处理器,用2个手指计数。转换为人类格式,基础10,这是昂贵的。它需要分割,这是处理器中最昂贵的事情之一。
答案 1 :(得分:0)
您可以尝试将数字转换为字符串,拆分为多个部分并逐部分写:
group1