簡體   English   中英

GetResponse()花費的時間太長

[英]GetResponse() taking too long

我正在開發winforms應用程序。

我有一個驗證URL的功能。

  private void checkForSPSiteValidity(DataGridView Sites_dataGridView)
    {
        foreach (DataGridViewRow myRow in SharePointSites_dataGridView.Rows)
        {
            try
            {
                DataGridViewImageCell cell = myRow.Cells[CommonCodeClass.status_GridCol] as DataGridViewImageCell;

                string url = myRow.Cells[CommonCodeClass.spURL_GridCol].Value.ToString();

                WebRequest req = WebRequest.Create(url);

                WebResponse res = req.GetResponse();

                cell.Value = Image.FromFile(CommonCodeClass.Correct_Icons);

            }
            catch (WebException ex)
            {
                Console.WriteLine(ex.Message);
                if (ex.Message.Contains("remote name could not be resolved"))
                {
                    DataGridViewImageCell cell = myRow.Cells[CommonCodeClass.status_GridCol] as DataGridViewImageCell;

                    cell.Value = Image.FromFile(CommonCodeClass.warning_Icon);
                }
            }
        }
    }

這段代碼可以正常工作,並且我獲得了正確的值,但是處理此問題和大多數情況下應用程序被掛起需要花費很長時間。

我是線程技術的新手,所以有一種方法可以實現它。 一個例子真的很有幫助

如果還有其他更好的方法,請告訴我。

謝謝

簽出BackgroundWorker控件。 這是一種簡單的方法。

HTH。

當您指出自己的解決方案時,必須異步執行獲取。 BackgroundWorker是一個很好的入門類,尤其是因為它是本機WinForms組件。

如果您想以更一般的方式解決它,也可以研究C#中新出現的異步擴展。

一個很好的方法是使用線程池:

它實現簡單,非常適合處理大量請求。

您還可以指定最大線程數並循環執行15、25、50等的設置,這樣您就不會削減太多線程並最終削減更多線程,那么這樣做是有好處的。 我將嘗試使用它來找出何時開始進行寬松的優化。

妙處是(請參閱第一個鏈接)您傳遞了一個對象(Object threadContext),該對象不必是單個值...它可以是強制轉換為對象的數組,列表等。 在使用列表等時,您可能需要仔細研究線程安全性=,但是我覺得這可能比您在此時進行線程處理要多。

如果有幫助,請評分。

暫無
暫無

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

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