none
请问如下的for循环还可以优化吗?花费时间过长50s RRS feed

  • 问题

  • public Form1()
            {
                InitializeComponent();
                Stopwatch sw = new Stopwatch();
                sw.Start();
                //string filePath = @"D:\cp.bin";
                string filePath = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase + @"cp.txt";//设置路径将文件保存在目标文件下
                
               using (FileStream fs = File.Create(filePath))//优化
               {
    double t0 = 0, f0 = 100000d;
                    //double beta = (f1 - f0) / t1;
                    double beta = 900000d/4.194304d;
                    double chirp = 0;
                    for(int i=0; i<=167772160; i++)
                    {
                        t0 += 0.000000025;
                        chirp = Math.Cos(Math.PI * (2 * f0 + beta * t0) * t0);
                        chirp = Math.Round(chirp * 2046);
                        chirp = chirp*2 + 2046;
                        byte[] b=Encoding.Unicode.GetBytes(chirp.ToString());
                        fs.Write(b, 0, b.Length);
    }
                }
                sw.Stop();
                MessageBox.Show("耗时为:  " + sw.ElapsedMilliseconds.ToString() + "  ms");
            }

    2017年10月13日 8:06

全部回复

  • for(int i=0; i<=167772160; i++)
                    {
                        t0 += 0.000000025;
                        chirp = Math.Cos(Math.PI * (2 * f0 + beta * t0) * t0);
                        chirp = Math.Round(chirp * 2046);
                        chirp = chirp*2 + 2046;
                        byte[] b=Encoding.Unicode.GetBytes(chirp.ToString());
                        fs.Write(b, 0, b.Length);
                        
                    }
    比如以上的for循环呢?
    2017年10月15日 8:53
  • 不可以简单的使用多线程,多线程操作数据时,要保证数据的完整性,比如转帐1000到B帐户,可以分5个线程,每个线程转帐200,

    也就是要考虑如何拆分原始数据到各个线程中去运行。

    对于文件读写,如果是读写同一个文件,我认为用多线程,反而会造成字节读写顺序难以控制(转帐操作是不考虑数据写入的顺序的),结果不正确,多线程同时操作文件造成死锁。


    专注于.NET ERP/CRM开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms

    2017年10月16日 0:52
  • 那这个for循环还可以优化吗?使其消耗的时间能短点。
    2017年10月16日 1:18
  • Hi,

    感谢在MSDN论坛发帖。

    你有考虑使用多线程来代替当前for 循环做的事情吗? 这样可能会节约你的时间。

    关于如果使用multiple thread, 你可以看下面的文章,里面还有实例.

    https://www.codeproject.com/Articles/1083/Multithreaded-Programming-Using-C

    https://msdn.microsoft.com/en-us/library/ff649143.aspx?f=255&MSPPError=-2147217396

    Best Regards,

    Hart


    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2017年10月16日 5:46
    版主
  • Hi,

    根据MSDN论坛的规则,请不要重复发相同的帖子,我将把这两个帖子合并。

    https://social.msdn.microsoft.com/Forums/zh-CN/536888b8-2445-4daa-838e-48d11a4dcff8/for50s?forum=2212

    Best Regards,

    Hart


    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2017年10月16日 5:51
    版主