Šis straipsnis yra veidrodinis mašininio vertimo straipsnis, spauskite čia norėdami pereiti prie originalaus straipsnio.

Rodinys: 16438|Atsakyti: 0

[WinForm] C# kelių gijų kūrimas

[Kopijuoti nuorodą]
Paskelbta 2019-12-11 12:08:45 | | |
Verslas, kurį reikia atlikti, yra atsisiųsti beveik 40 000 garso įrašų iš "Alibaba Cloud" į vietinę teritoriją, o vienas atsisiuntimas yra labai lėtas, todėl noriu naudoti kelių gijų ir vienu metu atsisiųsti 20 gijų, sutaupydamas daug laiko
          klasės programa
    {

        static void Main(string[] args) {
            string sql = "pasirinkite en_audio,us_audio iš t_audio LIMIT 198 ";
            MySqlDataReader mySqlDataReader = DBHelper.ExecuteReader(sql);         
            Sąrašas<String> sList = naujas Sąrašas<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)
            {
                o (mySqlDataReader.Read())
                {                 
                    sList.Add(mySqlDataReader.GetString(0));
                    sList.Add(mySqlDataReader.GetString(1));
                }
            }              
            Console.WriteLine(sList.Count);
            Chronometras = naujas chronometras ();
            chronometras. Pradžia();
            ThreadStart(sList);
            WaitHandle.WaitAll(laukia);  Visos klausymosi laukimo gijos buvo nustatytos prieš vykdant šį kodą, kitaip jos lauks čia
            chronometras. Stop();
            Console.WriteLine($"Daug laiko{chronometras. ElapsedMilliseconds}milisekundes");
            Console.ReadKey();


        }
       statinė gija[] gijos = nauja gija[20];
        statinis WaitHandle[] waits = naujas WaitHandle[20];
        public static void ThreadStart(List<String> nums) {
                  Priskirti gijas
            for (int i=0; I<20; i++) {
                threads[i] = new Thread(DownLoadFile);
                waits[i] = naujas AutoResetEvent(false);

            }
                 Priskirkite duomenis kiekvienai gijai, kad ji būtų vykdoma ir pradėtų vykdyti
            for (int i = 0; I < 20; i++)
            {
                if (i== gijos. Ilgis-1) {
                    var retult = nums. Skip(nums. Skaičius / 20 * i). Take(nums. Grafas. Skaičius / 20*i). ToList();
                    gijos[i]. Start(naujas Objpt()
                    {
                        sList = retult,
                        WaitHandle = laukia[i],
                        ThreadIndex = i
                    });
                }
                kitaip {
                  var retult= nums. Skip(nums. Skaičius / 20 * i). Take(nums. Skaičius / 20). ToList();
                    gijos[i]. Start(naujas Objpt() {
                     sList= retult,
                     WaitHandle=laukia[i],
                     ThreadIndex=i
                    });
                }

            }
        }

        public static void DownLoadFile(Object obj)
        {
            int skaičius = 0;
            Objpt optObj = (obj kaip Objpt);
            var sList = optObj.sList;
            Console.WriteLine($"Thread{optObj.ThreadIndex} pradėta";
            foreach (var url sList)
            {
                Pabandykite
                {
                    skaičius++;
                    var arrs = url. Split('/');
                    WebRequest užklausa = WebRequest.Create(url);
                    HttpWebResponse res = (HttpWebResponse)užklausa. GetResponse();
                    WebResponse atsakymas = užklausa. GetResponse();           
                    jei (res. StatusCode.ToString() == "Gerai")
                    {
                        Stream responseStream = atsakymas. GetResponseStream();
                        naudojant (FileStream fsWrite = new FileStream($"F:/Audio/v4/{arrs[arrs. Ilgis - 2]}/{arrs[arrs. Ilgis - 1]}", FileMode.OpenOrCreate, FileAccess.Write))
                        {
                            baitas[] buferis = naujas baitas[atsakymas. ContentLength];
                            nors (tiesa)
                            {
                                Grąžina šį kartą faktiškai perskaitytų baitų skaičių
                                int r = responseStream.Read(buferis, 0, buferis. ilgis);
                                jei (r == 0)
                                {
                                    pertrauka;
                                }
                                fsWrite.Write(buferis, 0, r); rašyti

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

                }
                laimikis (išimtis ex)
                {
                    eilutė strErrorLogFile = System.AppDomain.CurrentDomain.BaseDirectory + $"\\{optObj.ThreadIndex}ErrorLog.log";
                    jei (! System.IO.File.Exists(strErrorLogFile))
                        System.IO.File.WriteAllText(strErrorLogFile, "//System ErrorLog File\r\n");
                    object objSql = "thread" + optObj.ThreadIndex.ToString() + ex. Žinutė;
                    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} baigiasi");
            (optObj.WaitHandle kaip AutoResetEvent). Rinkinys();  nustatyti metodą yra pažymėti, kada baigiasi siūlas
        }
    }

     viešoji klasė Objpt {
        viešas sąrašas<String> sList { get; rinkinys; }
        viešasis WaitHandle WaitHandle { gauti; rinkinys; }
        public int ThreadIndex { get; rinkinys; }

    }





Ankstesnis:net/c# Kaip įgyvendinti DNS užgrobimą
Kitą:DateTime naudojimas
Atsakomybės apribojimas:
Visa programinė įranga, programavimo medžiaga ar straipsniai, kuriuos skelbia Code Farmer Network, yra skirti tik mokymosi ir mokslinių tyrimų tikslams; Aukščiau nurodytas turinys negali būti naudojamas komerciniais ar neteisėtais tikslais, priešingu atveju vartotojai prisiima visas pasekmes. Šioje svetainėje pateikiama informacija gaunama iš interneto, o ginčai dėl autorių teisių neturi nieko bendra su šia svetaine. Turite visiškai ištrinti aukščiau pateiktą turinį iš savo kompiuterio per 24 valandas nuo atsisiuntimo. Jei jums patinka programa, palaikykite autentišką programinę įrangą, įsigykite registraciją ir gaukite geresnes autentiškas paslaugas. Jei yra kokių nors pažeidimų, susisiekite su mumis el. paštu.

Mail To:help@itsvse.com