最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#使用HttpClient進(jìn)行Post請求出現(xiàn)超時(shí)問題的解決及優(yōu)化

 更新時(shí)間:2025年01月23日 10:27:48   作者:Thinbug  
最近我的控制臺程序發(fā)現(xiàn)有時(shí)候總是出現(xiàn)請求超時(shí)等問題,通常好幾分鐘最多只有3-4個(gè)請求,在使用apipost發(fā)現(xiàn)并發(fā)10個(gè)5分鐘也沒有問題,那么問題就出在我的請求端了,所以本文給大家介紹了C# 使用HttpClient進(jìn)行Post請求總是出現(xiàn)超時(shí)問題的優(yōu)化,需要的朋友可以參考下

優(yōu)化結(jié)論

我直接上優(yōu)化結(jié)論吧,就不放上老的代碼了。需要從以下幾個(gè)點(diǎn)來優(yōu)化。

單例HttpClient

問題:如果 HttpClient 實(shí)例頻繁創(chuàng)建和銷毀,可能導(dǎo)致連接池中的資源被占滿,新的請求需要等待釋放資源,從而造成長時(shí)間的延遲。

首先單例HttpClient,每次請求都會創(chuàng)建一個(gè)新的 HttpClient 實(shí)例。HttpClient 的短生命周期會導(dǎo)致以下問題:

1,頻繁建立和銷毀連接,無法復(fù)用已有的連接池。

2,增加連接開銷,可能導(dǎo)致長時(shí)間等待(尤其在并發(fā)請求時(shí))。

所以我們直接

private static readonly HttpClient client = new HttpClient
{
    Timeout = TimeSpan.FromSeconds(15) // 設(shè)置超時(shí)時(shí)間
};

連接池耗盡和并發(fā)

合理設(shè)置 ServicePointManager.DefaultConnectionLimit,因?yàn)榫退闶菃卫腍ttpClient也會有連接數(shù)的限制。我們看看這個(gè)參數(shù)說明:

// 摘要:
//     Gets or sets the maximum number of concurrent connections allowed by a System.Net.ServicePoint
//     object.
//
// 返回結(jié)果:
//     The maximum number of concurrent connections allowed by a System.Net.ServicePoint
//     object. The default connection limit is 10 for ASP.NET hosted applications and
//     2 for all others. When an app is running as an ASP.NET host, it is not possible
//     to alter the value of this property through the config file if the autoConfig
//     property is set to true. However, you can change the value programmatically when
//     the autoConfig property is true. Set your preferred value once, when the AppDomain
//     loads.
//
// 異常:
//   T:System.ArgumentOutOfRangeException:
//     System.Net.ServicePointManager.DefaultConnectionLimit is less than or equal to
//     0.

有一句是重點(diǎn)
ASP的默認(rèn)連接限制是10。. NET托管應(yīng)用程序和其他的都是2。
我可能有時(shí)又3-4個(gè)并發(fā),可能問題在這里,那么我直接設(shè)置100個(gè)就足夠滿足我的程序了。

ServicePointManager.DefaultConnectionLimit = 100; // 調(diào)高默認(rèn)連接限制

并發(fā)異步

如果你的程序有很高的并發(fā),可能會耗盡你的CPU,那么需要使用異步。

HttpResponseMessage response = await client.PostAsync(url, content);

最終優(yōu)化后

我最終的代碼狀態(tài)如下:

public async Task<string> PostFormResult(string url, string parm)
{
    Log("PostFormResult 開始請求: " + url + ", parm: " + parm);
    try
    {
        byte[] buf = Encoding.UTF8.GetBytes(parm);
        using (HttpContent content = new ByteArrayContent(buf))
        {
        	//這里我是表單,可以換成json
            content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/x-www-form-urlencoded");
			//content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json");
			//添加Token	
		    //client.DefaultRequestHeaders.Add("Authorization", "Bearer " + token);

            HttpResponseMessage res = await client.PostAsync(url, content);

            if (res.IsSuccessStatusCode)
            {
                string json = await res.Content.ReadAsStringAsync();
                Log("PostFormResult請求成功: " + json);
                return json;
            }
            else
            {
                Warning("PostFormResult請求失敗: " + res.StatusCode);
            }
        }

    }
    catch (HttpRequestException ex)
	{
	    Warning("請求Post出現(xiàn)錯誤: " + ex.Message);
	}
	catch (Exception ex)
	{
	    Warning($"請求Post出現(xiàn)錯誤: {ex.Message}");
	}
    return string.Empty;
}

我的請求會同時(shí)出現(xiàn)了4個(gè)。所以超過了并發(fā)所以產(chǎn)生了問題,修改后就沒有問題了。

到此這篇關(guān)于C#使用HttpClient進(jìn)行Post請求總是出現(xiàn)超時(shí)問題的解決及優(yōu)化的文章就介紹到這了,更多相關(guān)C# HttpClient進(jìn)行Post請求出現(xiàn)超時(shí)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C#串口關(guān)閉時(shí)主界面卡死的原因分析和解決方案

    C#串口關(guān)閉時(shí)主界面卡死的原因分析和解決方案

    最近在使用SerialPort類開發(fā)一個(gè)串口調(diào)試工具時(shí),遇到了一個(gè)經(jīng)典但令人頭疼的問題:點(diǎn)擊關(guān)閉串口按鈕后,UI 界面直接卡死(假死),本文將帶你從現(xiàn)象出發(fā),深入.NET源碼,一步步揭開這個(gè)界面卡死背后的真相,并提供一個(gè)優(yōu)雅且根本性的解決方案,需要的朋友可以參考下
    2025-11-11
  • 基于WinForm+Halcon實(shí)現(xiàn)圖像縮放與交互功能

    基于WinForm+Halcon實(shí)現(xiàn)圖像縮放與交互功能

    本文主要講述在 WinForm 中結(jié)合 Halcon 實(shí)現(xiàn)圖像縮放、平移及實(shí)時(shí)顯示灰度值等交互功能,包括初始化窗口的不同方式,以及通過特定事件添加相應(yīng)功能的詳細(xì)步驟和代碼示例,能提升圖像處理應(yīng)用的開發(fā)效率和用戶體驗(yàn),需要的朋友可以參考下
    2025-01-01
  • C#中對稱加密算法的踩坑日常記錄

    C#中對稱加密算法的踩坑日常記錄

    這篇文章主要給大家介紹了關(guān)于C#中對稱加密算法的踩坑日常記錄,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用C#具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • 詳解C#中HashTable的用法

    詳解C#中HashTable的用法

    在.NET Framework中,Hashtable是System.Collections命名空間提供的一個(gè)容器,用于處理和表現(xiàn)類似keyvalue的鍵值對,其中key通??捎脕砜焖俨檎?,同時(shí)key是區(qū)分大小寫;value用于存儲對應(yīng)于key的值
    2016-02-02
  • 詳解Unity地面檢測方案

    詳解Unity地面檢測方案

    本文主要介紹了Unity地面檢測方案,感興趣的同學(xué),可以參考下,并且親自實(shí)驗(yàn)一下。
    2021-05-05
  • C# System.Net.Dns 使用詳解

    C# System.Net.Dns 使用詳解

    System.Net.Dns類提供了一組靜態(tài)方法,用于執(zhí)行與DNS相關(guān)的操作,本文主要介紹了C# System.Net.Dns使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-07-07
  • c#網(wǎng)絡(luò)喚醒功能實(shí)現(xiàn)

    c#網(wǎng)絡(luò)喚醒功能實(shí)現(xiàn)

    網(wǎng)絡(luò)喚醒實(shí)現(xiàn)了對網(wǎng)絡(luò)的集中管理,即在任何時(shí)刻,網(wǎng)管中心的IT管理人員可以經(jīng)由網(wǎng)絡(luò)遠(yuǎn)程喚醒一臺處于休眠或關(guān)機(jī)狀態(tài)的計(jì)算機(jī),下面使用c#實(shí)現(xiàn)網(wǎng)絡(luò)喚醒功能
    2014-01-01
  • C#實(shí)現(xiàn).net頁面之間傳值傳參方法匯總

    C#實(shí)現(xiàn).net頁面之間傳值傳參方法匯總

    這篇文章主要介紹了C#實(shí)現(xiàn).net頁面之間傳值傳參方法,實(shí)例匯總了幾類常見的傳值傳參的方法,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2014-10-10
  • C#結(jié)合Free?Spire.PDF實(shí)現(xiàn)刪除PDF中的數(shù)字簽名

    C#結(jié)合Free?Spire.PDF實(shí)現(xiàn)刪除PDF中的數(shù)字簽名

    這篇文章主要為大家詳細(xì)介紹了C#如何結(jié)合Free?Spire.PDF實(shí)現(xiàn)刪除PDF中的數(shù)字簽名,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以參考一下
    2026-03-03
  • C# Bitmap圖像處理加速的實(shí)現(xiàn)

    C# Bitmap圖像處理加速的實(shí)現(xiàn)

    本文主要介紹了C# Bitmap圖像處理加速的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11

最新評論

桦南县| 高清| 凤翔县| 韶山市| 错那县| 奈曼旗| 石阡县| 泰顺县| 永泰县| 东阿县| 长乐市| 伊川县| 临沭县| 绩溪县| 南投县| 盐山县| 微博| 碌曲县| 五常市| 汤原县| 大洼县| 大兴区| 喜德县| 永城市| 和龙市| 锡林浩特市| 威信县| 恩平市| 鄂伦春自治旗| 台州市| 西盟| 洪雅县| 多伦县| 阳山县| 拜泉县| 金门县| 奇台县| 萨迦县| 大足县| 慈利县| 绍兴县|