我有一个负载测试器应用程序,并使用异步 Web api 将大量流量发送到测试服务器。该应用程序有 2 个 GUI 化身:一个是通过标准 .aspx 表单控制的 Web 应用程序。另一个是 WPF 表单应用程序。然而,http 代码在这两种情况下都是相同的,所以我对性能差异的原因感到困惑。
在 WPF 应用程序中,CLR 调用 GetRequestStreamCallback 之前大约有 30 秒。在 Web 应用程序中,它更像是 40 毫秒。我怀疑这与 2 个应用程序中的线程模型有关(这里没有显示很多线程)。由于 GetRequestStreamCallback 是一个回调,因此我无法影响它被调用的优先级。
任何见解都值得赞赏,亚伦
public class PendingRequestWrapper
{
public HttpWebRequest request;
PendingRequestWraqpper(HttpWebRequest req) {request = req;}
}
public class Poster
{
public static void SendPost(string url) {
HttpWebRequest request = (HttpWebRequest)
WebRequest.Create(url);
request.Method = "POST";
// more header setup ...
PendingRequestWrapper = new PendingRequestWrapper(request);
wrap.request.BeginGetRequestStream(new AsyncCallback(GetRequestStreamCallback), wrap);
}
private static void GetRequestStreamCallback(IAsyncResult asynchronousResult)
{
PendingRequestWrapper wrap = asynchronousResult.AsyncState as PendingRequestWrapper;
try {
// End the operation
System.Diagnostics.Debug.Writeln("Received req stream for " + wrap.request.RequestUri.ToString());
Stream postStream = wrap.request.EndGetRequestStream(asynchronousResult);
} catch(Exception e)
{
// ...
}
// Use the stream
}
}