我注意到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) 我想循环遍历HttpRequestHeadersof的所有标头HttpRequestMessage。
我只是将我的代码从 迁移HttpWebRequest到HttpClient. 我使用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 …
我这样初始化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# ×3
.net ×1
async-await ×1
decimal ×1
header ×1
httpclient ×1
parsing ×1
performance ×1
timeout ×1