HTTP 테스트를 테스트하기 위해 테스트 장치를 작성 중입니다. 테스트 케이스는 10 초 간격으로 webclient 클래스에서 UploadValuesAsync를 사용하여 8 HTTP 요청을 보냅니다. 8 회의 요청이있을 때마다 10 초 후에 대기합니다. 각 요청의 시작 시간과 종료 시간을 기록합니다. 평균 응답 시간을 계산할 때. 나는 약 800 밀리미터를 얻고있다. 그러나이 테스트 케이스를 웹 클라이언트에서 UploadValues 메소드를 사용하여 동 기적으로 실행하면 평균 응답 시간이 250 밀리 초입니다. 이 두 가지 방법의 차이점은 무엇이라고 말할 수 있습니까? Aync에서 응답 시간이 짧을 것으로 예상했지만 그걸 얻지 못했습니다. 여기UploadValuesAsync 응답 시간
는 업데이트]
var count = 0;
foreach (var nameValueCollection in requestCollections)
{
count++;
NameValueCollection collection = nameValueCollection;
PostToURL(collection,uri);
if (count % 8 == 0)
{
Thread.Sleep(TimeSpan.FromSeconds(10));
count = 0;
}
}
비동기 8 개 요청을 보내는 코드입니다 여기에 8 개 요청 여기
public void PostToURLSync(NameValueCollection collection,Uri uri)
{
var response = new ServiceResponse
{
Response = "Not Started",
Request = string.Join(";", collection.Cast<string>()
.Select(col => String.Concat(col, "=", collection[col])).ToArray()),
ApplicationId = collection["ApplicationId"]
};
try
{
using (var transportType2 = new DerivedWebClient())
{
transportType2.Expect100Continue = false;
transportType2.Timeout = TimeSpan.FromMilliseconds(2000);
response.StartTime = DateTime.Now;
var responeByte = transportType2.UploadValues(uri, "POST", collection);
response.EndTime = DateTime.Now;
response.Response = Encoding.Default.GetString(responeByte);
}
}
catch (Exception exception)
{
Console.WriteLine(exception.ToString());
}
response.ResponseInMs = (int)response.EndTime.Subtract(response.StartTime).TotalMilliseconds;
responses.Add(response);
Console.WriteLine(response.ResponseInMs);
}
를 동기화 전송 코드입니다 URI
는 HTTP에 게시 코드 여기
public void PostToURL(NameValueCollection collection,Uri uri)
{
var response = new ServiceResponse
{
Response = "Not Started",
Request = string.Join(";", collection.Cast<string>()
.Select(col => String.Concat(col, "=", collection[col])).ToArray()),
ApplicationId = collection["ApplicationId"]
};
try
{
using (var transportType2 = new DerivedWebClient())
{
transportType2.Expect100Continue = false;
transportType2.Timeout = TimeSpan.FromMilliseconds(2000);
response.StartTime = DateTime.Now;
transportType2.UploadValuesCompleted += new UploadValuesCompletedEventHandler(transportType2_UploadValuesCompleted);
transportType2.UploadValuesAsync(uri, "POST", collection,response);
}
}
catch (Exception exception)
{
Console.WriteLine(exception.ToString());
}
}
는 uplo이고 광고 완료 이벤트 당신은 아마로 실행중인
private void transportType2_UploadValuesCompleted(object sender, UploadValuesCompletedEventArgs e)
{
var now = DateTime.Now;
var response = (ServiceResponse)e.UserState;
response.EndTime = now;
response.ResponseInMs = (int) response.EndTime.Subtract(response.StartTime).TotalMilliseconds;
Console.WriteLine(response.ResponseInMs);
if (e.Error != null)
{
response.Response = e.Error.ToString();
}
else
if (e.Result != null && e.Result.Length > 0)
{
string downloadedData = Encoding.Default.GetString(e.Result);
response.Response = downloadedData;
}
//Recording response in Global variable
responses.Add(response);
}
보내시는 컬렉션의 크기는 어느 정도입니까? async를 사용할 때 모든 요청을 병렬로 보내지 만 동기화 버전은 다른 요청을 한 번 보냅니다. 그리고 동기화 코드도 올릴 수 있습니까? – svick
테스트중인 @svick 컬렉션에는 100 개의 개체가 포함되어 있습니다. 업데이트 된 동기화 코드. – Amzath