小编Luk*_*741的帖子

更快的decimal.Parse替代品

我注意到decimal.Parse(number, NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture)比基于Jeffrey Sax的代码的自定义十进制解析方法慢大约100%,该代码来自Faster替代Convert.ToDouble

public static decimal ParseDecimal(string input) {
    bool negative = false;
    long n = 0;

    int len = input.Length;
    int decimalPosition = len;

    if (len != 0) {
        int start = 0;
        if (input[0] == '-') {
            negative = true;
            start = 1;
        }

        for (int k = start; k < len; k++) {
            char c = input[k];

            if (c == '.') {
                decimalPosition = k +1;
            } else {
                n = (n *10) …
Run Code Online (Sandbox Code Playgroud)

c# performance parsing decimal

10
推荐指数
1
解决办法
1838
查看次数

c# 如何循环遍历 HttpRequestHeaders 的所有标头

我想循环遍历HttpRequestHeadersof的所有标头HttpRequestMessage

我只是将我的代码从 迁移HttpWebRequestHttpClient. 我使用HttpWebRequest以下代码来循环它WebHeaderCollection

StringBuilder headers_ = new StringBuilder();
foreach (string key in headers.AllKeys)
{
    headers_.Append(key).Append(':').Append(headers[key]).Append(' ');
}
headers_.Length--;
Run Code Online (Sandbox Code Playgroud)

HttpRequestHeaders没有 AllKeys 方法。它只GetValues(string name)检索一个指定的标头。

HttpRequestMessage requestMessage = new HttpRequestMessage
{
    Method = HttpMethod.Post,
    RequestUri = new Uri("https://postman-echo.com/post"),
    Headers = {
        { "header1", "aa" },
        { "header2", "bb" },
    },
    Content = new StringContent("hi=aa")
}
Run Code Online (Sandbox Code Playgroud)

如何以编程方式检索 { "header1", "aa" }, { "header2", "bb" } 对requestMessage …

.net c# header

6
推荐指数
1
解决办法
9000
查看次数

HttpClient 查询偶尔挂起

我这样初始化HttpClient

public static CookieContainer cookieContainer = new CookieContainer();
public static HttpClient httpClient = new HttpClient(new HttpClientHandler() { AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate, CookieContainer = cookieContainer }) { Timeout = TimeSpan.FromSeconds(120) };
Run Code Online (Sandbox Code Playgroud)

所以TaskCanceledException如果在 120 秒内没有收到响应,所有查询都应该抛出。但是某些查询(例如 1 of 100 000-1 000 000)会无限挂起。

我写了以下代码:

public static async Task<HttpResponse> DownloadAsync2(HttpRequestMessage httpRequestMessage)
{
    HttpResponse response = new HttpResponse { Success = false, StatusCode = (int)HttpStatusCode.RequestTimeout, Response = "Timeout????????" };
    Task task;
    if (await Task.WhenAny(
        task = Task.Run(async () =>
        {
            try …
Run Code Online (Sandbox Code Playgroud)

c# timeout httpclient async-await

5
推荐指数
1
解决办法
707
查看次数

标签 统计

c# ×3

.net ×1

async-await ×1

decimal ×1

header ×1

httpclient ×1

parsing ×1

performance ×1

timeout ×1