C# 在多线程c中使用web服务#
我正在使用一个供应商在c#应用程序中提供给我的web服务。此应用程序在循环中调用web方法,这会降低性能。要获得完整的结果,需要一个多小时 我是否可以应用多线程来在多个线程中使用此web服务,并将结果组合在一起C# 在多线程c中使用web服务#,c#,multithreading,web-services,C#,Multithreading,Web Services,我正在使用一个供应商在c#应用程序中提供给我的web服务。此应用程序在循环中调用web方法,这会降低性能。要获得完整的结果,需要一个多小时 我是否可以应用多线程来在多个线程中使用此web服务,并将结果组合在一起 有没有更好的方法可以在几分钟内而不是几小时内检索数据?你真的应该问问你的供应商。我们只能推测为什么需要这么长时间,或者触发多个请求是否会产生与长时间请求相同的结果 基本上,发送一个请求得到一个响应应该优于多线程变体,因为它应该更容易在服务器端进行优化 如果您想知道为什么当前版本的服务不是
有没有更好的方法可以在几分钟内而不是几小时内检索数据?你真的应该问问你的供应商。我们只能推测为什么需要这么长时间,或者触发多个请求是否会产生与长时间请求相同的结果 基本上,发送一个请求得到一个响应应该优于多线程变体,因为它应该更容易在服务器端进行优化
如果您想知道为什么当前版本的服务不是这样,请询问供应商。首先,您必须确保您的供应商确实支持或不禁止该服务(这也是很可能的) 执行此操作的代码本身非常简单,使用了类似于
Parallel.For
简单示例(google.com):
Parallel.For(0, norequests,
i => {
//Code that does your request goes here
} );
考试:
Parallel.For(0, norequests,
i => {
//Code that does your request goes here
} );
在Parallel.For
循环中,所有请求都以并行方式执行(如名称所示),这可能会显著提高性能
进一步阅读:
Parallel.For(0, norequests,
i => {
//Code that does your request goes here
} );
如果您并行调用web服务,这只是示例:
private void TestParallelForeach()
{
string[] uris = {"http://192.168.1.2", "http://192.168.1.3", "http://192.168.1.4"};
var results = new List<string>();
var syncObj = new object();
Parallel.ForEach(uris, uri =>
{
using (var webClient = new WebClient())
{
webClient.Encoding = Encoding.UTF8;
try
{
var result = webClient.DownloadString(uri);
lock (syncObj)
{
results.Add(result);
}
}
catch (Exception ex)
{
// Do error handling here...
}
}
});
// Do with "results" here....
}
private void TestParallelForeach()
{
字符串[]URI={”http://192.168.1.2", "http://192.168.1.3", "http://192.168.1.4"};
var results=新列表();
var syncObj=新对象();
Parallel.ForEach(uri,uri=>
{
使用(var webClient=new webClient())
{
webClient.Encoding=Encoding.UTF8;
尝试
{
var result=webClient.DownloadString(uri);
锁(同步对象)
{
结果。添加(结果);
}
}
捕获(例外情况除外)
{
//在这里做错误处理。。。
}
}
});
//在这里处理“结果”。。。。
}
这取决于您的代码。如果你能提供代码,我们可以看一看,给你一个更好的解决方案。可能不会。除非服务是为多线程设计的,否则它将无法工作。您可以检查任务管理器,查看服务是否使用了大量内存。该服务可能正在查询大型数据库,这可能会导致性能低下。不确定为什么有人会建议不能在并发线程上调用该服务。有没有像web应用程序这样的东西不能处理并发请求?您发送了多少请求,而这需要一个多小时?这将揭示一些东西。如果你发送五个请求,需要一个小时,那是一回事。如果是1000,那是另外一回事。