우리는 C# app에서 WCF (BasicHttpBinding)를 사용하여 약 300ms 걸리는 webservice를 호출합니다. 우리는 동일한 SOAP 호출이 SOAP UI에서 전송할 때 약 30ms 만 걸리는 것으로 나타났습니다.자바 대 순수한 HTTP 클라이언트 성능
이제 우리는 기본 WebClient를 통해 웹 서비스에 액세스하는 테스트를 구현하여 WCf의 DeSer 부분이이 추가 지연의 원인이 아닌지 확인했습니다. WebClient 클래스를 사용하는 경우 호출에는 약 300ms가 소요됩니다.
Java가 C#과 비교되는 이유에 대한 아이디어는이 점에서 약 10 배 더 빠릅니까? 사물의 .NET 측면에서 가능한 일종의 조정이 있습니까?
private void Button_Click(object sender, RoutedEventArgs e)
{
executeTest(() =>
{
var resultObj = client.getNextSeqNr(new WcfClient()
{
domain = "?",
hostname = "?",
ipaddress = "?",
loginVersion = "?",
processId = "?",
program = "?",
userId = "?",
userIdPw = "?",
userName = "?"
}, "?", "?");
});
}
private void Button_Click_1(object sender, RoutedEventArgs e)
{
WebClient webClient = new WebClient();
executeTest(()=>
{
webClient.Proxy = null;
webClient.CachePolicy = new System.Net.Cache.RequestCachePolicy(System.Net.Cache.RequestCacheLevel.NoCacheNoStore);
webClient.Headers.Add("Content-Type", "application/xml");
webClient.Encoding = Encoding.UTF8;
var data = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:ser=\"SomeNamespace\">" +
" <soapenv:Header/>" +
" <soapenv:Body>" +
" <ser:getNextSeqNr>" +
" <!--Optional:-->" +
" <clientInfo>" +
" <!--Optional:-->" +
" <domain>?</domain>" +
" <!--Optional:-->" +
" <hostname>?</hostname>" +
" <!--Optional:-->" +
" <ipaddress>?</ipaddress>" +
" <!--Optional:-->" +
" <loginVersion>?</loginVersion>" +
" <!--Optional:-->" +
" <processId>?</processId>" +
" <!--Optional:-->" +
" <program>?</program>" +
" <!--Optional:-->" +
" <userId>*</userId>" +
" <!--Optional:-->" +
" <userIdPw>?</userIdPw>" +
" <!--Optional:-->" +
" <userName>?</userName>" +
" </clientInfo>" +
" <!--Optional:-->" +
" <name>?</name>" +
" <!--Optional:-->" +
" <schema>?</schema>" +
" </ser:getNextSeqNr>" +
" </soapenv:Body>" +
"</soapenv:Envelope>";
string result = webClient.UploadString("http://server:8080/service", "POST", data);
});
}
내가 여기에 뭔가가 없습니까? 어떤 생각 난 그냥 이것에 대한 이유를 발견 ... ;-)
종류의 안부 세바스찬
WCF에서 동일한 프로그램의 동일한 서비스에 대한 후속 호출에 소요되는 시간은 얼마나됩니까? 한 번 한 번 수행 할 시간을 확인하는 것은 성능에 대한 신뢰할만한 테스트가 아닙니다. –
첫 번째 WCF 호출은 더 느리지 만 WCF 및 일반 WebClient 호출의 후속 호출은 여전히 해당 Java 클라이언트 (또는 SoapUI)보다 약 10 배 느립니다. 평균적인 경우를 측정하기 위해 테스트를 루프에서 실행했습니다 ... –