See artikkel on masintõlke peegelartikkel, palun klõpsake siia, et hüpata algse artikli juurde.

Vaade: 16438|Vastuse: 0

[WinForm] C# mitmelõimeline arendus

[Kopeeri link]
Postitatud 11.12.2019 12:08:45 | | |
Ülesanne on alla laadida ligi 40 000 helilõiku Alibaba pilvest kohalikku piirkonda ning üks allalaadimine on väga aeglane, seega tahan kasutada mitmelõimelist lahendust ja eraldada 20 lõime samaaegselt allalaadimiseks, säästes palju aega
          Klassiprogramm
    {

        staatiline void Main(string[] args) {
            string sql = "vali en_audio,us_audio t_audio LIMIT 198-st";
            MySqlDataReader mySqlDataReader = DBHelper.ExecuteReader(sql);         
            List<String> sList = uus List<String>();
            sList.Add("https://qutifen-qudao.oss-cn-beijing.aliyuncs.com/mfg/audio/v3/1abacus_en.ogg");
            sList.Add("https://qutifen-qudao.oss-cn-beijing.aliyuncs.com/mfg/audio/v3/2abacus_en.ogg");
            if (mySqlDataReader.HasRows)
            {
                while (mySqlDataReader.Read())
                {                 
                    sList.Add(mySqlDataReader.GetString(0));
                    sList.Add(mySqlDataReader.GetString(1));
                }
            }              
            Console.WriteLine(sList.Count);
            Stopper stopper = uus stopper();
            stopper. Start();
            ThreadStart(sList);
            WaitHandle.WaitAll(ootab);  Kõik kuulamisootuses olevad lõimed on seadistatud enne järgmise koodi käivitamist, muidu ootavad nad siin
            stopper. Stop();
            Console.WriteLine($"Time-consuming{stopwatch. MöödunudMillisekundid}millisekundid");
            Console.ReadKey();


        }
       staatiline Thread[] threads = uus Thread[20];
        staatiline WaitHandle[] waits = uus WaitHandle[20];
        public static void ThreadStart(List<String> nums) {
                  Lõimede määramine
            for (int i=0; i<20; i++) {
                threads[i] = uus Thread(DownLoadFile);
                ootab[i] = uus AutoResetEvent(vale);

            }
                 Määra igale lõimele andmed täitmiseks ja käivitamiseks
            for (int i = 0; Ma < 20; i++)
            {
                kui (i== lõimed. Pikkus-1) {
                    var retult = nums. Vahele jätta (nums. Loend / 20 * i). Võta (num. Loendus- numbreid. Loend / 20*i). ToList();
                    teemad[i]. Start(new Objpt()
                    {
                        sList = retult,
                        WaitHandle = ootab[i],
                        ThreadIndex = i
                    });
                }
                else {
                  var retult= nums. Vahele jätta (nums. Loend / 20 * i). Võta (num. Loendus / 20). ToList();
                    teemad[i]. Start(new Objpt() {
                     sList= retult,
                     WaitHandle=ootab[i],
                     ThreadIndex=i
                    });
                }

            }
        }

        public static void DownLoadFile(Object obj)
        {
            int arv = 0;
            Objpt optObj = (obj kui Objpt);
            var sList = optObj.sList;
            Console.WriteLine($"Thread{optObj.ThreadIndex} started";
            foreach (var url sListis)
            {
                proovi
                {
                    loendus++;
                    var arrs = URL. Split('/');
                    WebRequest request = WebRequest.Create(url);
                    HttpWebResponse res = (HttpWebResponse)request. GetResponse();
                    WebResponse vastus = päring. GetResponse();           
                    if (res. StatusCode.ToString() == "OK")
                    {
                        Voog vastusStream = vastus. GetResponseStream();
                        kasutades (FileStream fsWrite = new FileStream($"F:/Audio/v4/{arrs[arrs. Pikkus - 2]}/{arrs[arrs. Pikkus - 1]}", FileMode.OpenOrCreate, FileAccess.Write))
                        {
                            bait[] puhver = uus bait[vastus. ContentLength];
                            samal ajal (tõene)
                            {
                                Tagastab seekord loetud baitide arvu
                                int r = responseStream.Read(puhver, 0, puhver. Pikkus);
                                kui (r == 0)
                                {
                                    paus;
                                }
                                fsWrite.Write(puhver, 0, r); kirjuta

                            }
                        }
                    }
                    if (count % 20 == 0 || count == sList.Count)
                    //{
                    Console.WriteLine($"Thread{optObj.ThreadIndex} processed:{count}");
                    //}

                }
                catch (Exception ex)
                {
                    string strErrorLogFile = System.AppDomain.CurrentDomain.BaseDirectory + $"\\{optObj.ThreadIndex}ErrorLog.log";
                    kui (! System.IO.File.Exists(strErrorLogFile))
                        System.IO.File.WriteAllText(strErrorLogFile, "//System ErrorLog File\r\n");
                    object objSql = "thread" + optObj.ThreadIndex.ToString() + ex. Sõnum;
                    System.IO.File.AppendAllText(strErrorLogFile, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "\t" + objSql.ToString() + url + "\r\n");

                }

            }
            Console.WriteLine($"Thread{optObj.ThreadIndex} lõpeb");
            (optObj.WaitHandle as AutoResetEvent). Set();  Set-meetod on märgistada, millal lõim lõpeb
        }
    }

     public class Objpt {
        public List<String> sList { get; seatud; }
        public WaitHandle WaitHandle { get; seatud; }
        public int ThreadIndex { get; seatud; }

    }





Eelmine:net/c# Kuidas rakendada DNS-i kaaperdamist
Järgmine:DateTime'i kasutamine
Disclaimer:
Kõik Code Farmer Networki poolt avaldatud tarkvara, programmeerimismaterjalid või artiklid on mõeldud ainult õppimiseks ja uurimistööks; Ülaltoodud sisu ei tohi kasutada ärilistel ega ebaseaduslikel eesmärkidel, vastasel juhul kannavad kasutajad kõik tagajärjed. Selle saidi info pärineb internetist ning autoriõiguste vaidlused ei ole selle saidiga seotud. Ülaltoodud sisu tuleb oma arvutist täielikult kustutada 24 tunni jooksul pärast allalaadimist. Kui sulle programm meeldib, palun toeta originaaltarkvara, osta registreerimist ja saa paremaid ehtsaid teenuseid. Kui esineb rikkumist, palun võtke meiega ühendust e-posti teel.

Mail To:help@itsvse.com