簡體   English   中英

C# 多個 Web 數據/流讀取器

[英]C# Multiple Web Data/Stream Reader

我正在盡我所能自學編程,但是,我的代碼似乎並沒有達到應有的效率。 我試圖通過做我在正常場合使用的事情來學習,但我不知道如何正確管理它,所以任何信息都將不勝感激。

我目前正在開發一個供個人使用的 discord 機器人,它工作正常,當涉及到這部分命令時,加載時間非常糟糕。 也許是因為我試圖讓它打開、讀取和關閉多個數據庫? 或者是否有另一種解釋或方法可以使其在更快的時間內加載?

        string NormalExp = "0";
        string IronExp = "0";
        string HCExp = "0";
        string UIMExp = "0";

        //Normal Account
        try
        {
            WebRequest NormalScore = WebRequest.Create("https://secure.runescape.com/m=hiscore_oldschool/index_lite.ws?player=" + player);
            WebResponse NormalResponse = NormalScore.GetResponse();
            using (Stream NormalDStream = NormalResponse.GetResponseStream())
            {
                StreamReader NormalReader = new StreamReader(NormalDStream);
                string NormalResponseFromServer = NormalReader.ReadToEnd();
                var _Score = NormalResponseFromServer.Split('\n');

                var _Total = _Score[0];
                var _TotalGet = _Total.Split(',');
                var _TotalRank = _TotalGet[0];
                var _TotalLevel = _TotalGet[1];
                var _TotalExp = _TotalGet[2];

                NormalExp = _TotalExp;
            }
            NormalResponse.Close();
        }
        catch (Exception)
        {

        }

        //Normal Ironman
        try
        {
            WebRequest IronScore = WebRequest.Create("https://secure.runescape.com/m=hiscore_oldschool_ironman/index_lite.ws?player=" + player);
            WebResponse IronResponse = IronScore.GetResponse();
            using (Stream IronDStream = IronResponse.GetResponseStream())
            {
                StreamReader IronReader = new StreamReader(IronDStream);
                string IronResponseFromServer = IronReader.ReadToEnd();
                var _Score = IronResponseFromServer.Split('\n');

                var _Total = _Score[0];
                var _TotalGet = _Total.Split(',');
                var _TotalRank = _TotalGet[0];
                var _TotalLevel = _TotalGet[1];
                var _TotalExp = _TotalGet[2];

                IronExp = _TotalExp;
            }
            IronResponse.Close();
        }
        catch (Exception)
        {

        }

        //Hardcore Ironman
        try
        {
            WebRequest HCScore = WebRequest.Create("https://secure.runescape.com/m=hiscore_oldschool_hardcore_ironman/index_lite.ws?player=" + player);
            WebResponse HCResponse = HCScore.GetResponse();
            using (Stream HCDStream = HCResponse.GetResponseStream())
            {
                StreamReader HCReader = new StreamReader(HCDStream);
                string HCResponseFromServer = HCReader.ReadToEnd();
                var _Score = HCResponseFromServer.Split('\n');

                var _Total = _Score[0];
                var _TotalGet = _Total.Split(',');
                var _TotalRank = _TotalGet[0];
                var _TotalLevel = _TotalGet[1];
                var _TotalExp = _TotalGet[2];

                HCExp = _TotalExp;
            }
            HCResponse.Close();
        }
        catch (Exception)
        {

        }

        //Ultimate Ironman
        try
        {
            WebRequest UIMScore = WebRequest.Create("https://secure.runescape.com/m=hiscore_oldschool_ultimate/index_lite.ws?player=" + player);
            WebResponse UIMResponse = UIMScore.GetResponse();
            using (Stream UIMDStream = UIMResponse.GetResponseStream())
            {
                StreamReader UIMReader = new StreamReader(UIMDStream);
                string UIMResponseFromServer = UIMReader.ReadToEnd();
                var _Score = UIMResponseFromServer.Split('\n');

                var _Total = _Score[0];
                var _TotalGet = _Total.Split(',');
                var _TotalRank = _TotalGet[0];
                var _TotalLevel = _TotalGet[1];
                var _TotalExp = _TotalGet[2];

                UIMExp = _TotalExp;
            }
            UIMResponse.Close();
        }
        catch (Exception)
        {

        }

        await ReplyAsync(
                $"**Normal: ** {NormalExp}\n" +
                $"**Ironman: ** {IronExp}\n" +
                $"**Hardcore: ** {HCExp}\n" +
                $"**UIM: ** {UIMExp}");

        if (Convert.ToInt64(UIMExp) == Convert.ToInt64(NormalExp))
        {
            await ReplyAsync("Account is a UIM");
        }
        else if (Convert.ToInt64(HCExp) == Convert.ToInt64(NormalExp))
        {
            await ReplyAsync("Account is a HC");
        }
        else if (Convert.ToInt64(IronExp) == Convert.ToInt64(NormalExp) && Convert.ToInt64(IronExp) > Convert.ToInt64(UIMExp + HCExp))
        {
            if (Convert.ToInt32(UIMExp) > 1)
            {
                await ReplyAsync("Account is a ~~UIM~~ Normal Ironman");
            }
            else if (Convert.ToInt64(HCExp) > 1)
            {
                await ReplyAsync("Account is a ~~HC~~ Normal Ironman");
            }
            else
            {
                await ReplyAsync("Account is a Normal Ironman");
            }
        }
        else
        {
            if (Convert.ToInt64(UIMExp) > 1 && Convert.ToInt64(IronExp) > 1)
            {
                await ReplyAsync("Account is a ~~UIM~~, ~~Ironman~~, normal player.");
            }
            else if (Convert.ToInt64(HCExp) > 1 && Convert.ToInt64(IronExp) > 1)
            {
                await ReplyAsync("Account is a ~~HC~~, ~~Ironman~~, normal player.");
            }
            else if (Convert.ToInt64(IronExp) > 1 && Convert.ToInt64(HCExp) == 0 && Convert.ToInt64(UIMExp) == 0)
            {
                await ReplyAsync("Account is a ~~Ironman~~ normal player.");
            }
            else
            {
                await ReplyAsync("Account is a Normal Player");
            }
        }

通常,發送請求是一項昂貴的操作,但您可以通過更改方法來改進它。

嘗試使用HttpClient而不是 WebRequest

我建議閱讀有關異步/同步操作的信息

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM