Tag: libcurl

如何获得快速的.Net Http请求

我需要一个Http请求,我可以在.Net中使用它需要不到100毫秒。 我能够在浏览器中实现这一点,所以我真的不明白为什么这在代码中是个问题。 我已经尝试过WinHTTP以及WebRequest.Create,它们都超过500毫秒,这对我的用例来说是不可接受的。 以下是我试图通过的简单测试的示例。 (WinHttpFetcher是我写的一个简单的包装器,但是它确实是一个获取请求的最简单的例子,我不确定它是否值得粘贴。) 我正在使用LibCurlNet获得可接受的结果,但如果同时使用该类,我会收到访问冲突。 此外,由于它不是托管代码,必须复制到bin目录,因此使用我的开源项目进行部署并不理想。 尝试另一个实现的任何想法? [Test] public void WinHttp_Should_Get_Html_Quickly() { var fetcher = new WinHttpFetcher(); var startTime = DateTime.Now; var result = fetcher.Fetch(new Uri(“http://localhost”)); var endTime = DateTime.Now; Assert.Less((endTime – startTime).TotalMilliseconds, 100); } [Test] public void WebRequest_Should_Get_Html_Quickly() { var startTime = DateTime.Now; var req = (HttpWebRequest) WebRequest.Create(“http://localhost”); var response = req.GetResponse(); var […]

为什么我的任务没有取消?

我正在运行一个定期curl到URL列表的流程,以测试这些网站的性能。 我的主程序基本上是一个do … sleep … while循环,每N秒调用一个函数runTest(),用键盘中断将其终止。 简述了基础知识,我的代码如下: public void runTest() { if(isRunning) { return; //Plus some logging that one or more of the tests hasn’t completed } try { isRunning = true; Curl.GlobalInit((int)CURLinitFlag.CURL_GLOBAL_ALL); CancellationTokenSource cts = new CancellationTokenSource(httpTimeoutValueMs * 2); foreach (var url in urls) taskList.Add(doAsyncCurls(url, cts)) List listOfResults = Task.WhenAll(taskList.Select(x => x)).Result.ToList(); taskList.Clear(); } […]