int count = 20;        //要生成20个
        string s = "0123456789abcdefghjklmnpqrstuvwxyz";
        char[] c = new char[5];
        int counter = 0;
        for (int i = 0; i < s.Length; i++)
        {
            c[0] = s[i];
            for (int j = 0; j < s.Length; j++)
            {
                c[1] = s[j];
                for (int k = 0; k < s.Length; k++)
                {
                    c[2] = s[k];
                    for (int m = 0; m < s.Length; m++)
                    {
                        c[3] = s[m];
                        for (int n = 0; n < s.Length; n++)
                        {
                            if (counter == 0)
                                n = 1;
                            c[4] = s[n];
                            string r = new string(c);
                            if (counter < count)
                            {
                                 FileStream fst = new FileStream(sss,FileMode.Append); 
                    StreamWriter swt = new StreamWriter(fst,System.Text.Encoding.GetEncoding("utf-8"));
                                counter++;
                            }
                            else
                            {
                                i = j = k = m = n = s.Length;
                                break;
                            }
                        }
                    }
                }
            }
        }
上面一段代码是生成一个指定数目的有序的五位格式字符串,每生成一个写入txt文档,但是如果是要生成几百万的数据,速度非常胡慢,有没有什么方式能够速度很快的,谢谢

解决方案 »

  1.   

    把FileStream 这段,放到if循环外围,不要在循环内部每次都创建,创建一次足矣,然后在循环中不断写入,最后关闭
      

  2.   

    有个叫 ATTO Disk Bench 的软件,用来测试不同文件块大小读写,硬盘性能的。lz可以在自己的电脑上运行测试。一般地说,当块大小超过512KB的时候,硬盘读写的效率是最高的(接近持续传输率的90%),相反,512字节(一个扇区是磁盘读写的最小单位)硬盘的性能只发挥了5~10%但是对于固态硬盘,RAID,情况则不同。但是大致的思路就是在内存中建立缓冲,每512K~1MB左右写一次。
      

  3.   

    我们还可以估算出理论的速度上限。不可能超过硬盘的持续传输率。大约是每秒50~100MB。另外可以看看CPU负荷。一般连续读写的CPU负荷小于20%,对于双核CPU,应该小于15%,如果比这个高,则是你程序的算法问题了。