Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在多线程c中使用web服务#_C#_Multithreading_Web Services - Fatal编程技术网

C# 在多线程c中使用web服务#

C# 在多线程c中使用web服务#,c#,multithreading,web-services,C#,Multithreading,Web Services,我正在使用一个供应商在c#应用程序中提供给我的web服务。此应用程序在循环中调用web方法,这会降低性能。要获得完整的结果,需要一个多小时 我是否可以应用多线程来在多个线程中使用此web服务,并将结果组合在一起 有没有更好的方法可以在几分钟内而不是几小时内检索数据?你真的应该问问你的供应商。我们只能推测为什么需要这么长时间,或者触发多个请求是否会产生与长时间请求相同的结果 基本上,发送一个请求得到一个响应应该优于多线程变体,因为它应该更容易在服务器端进行优化 如果您想知道为什么当前版本的服务不是

我正在使用一个供应商在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,那是另外一回事。