Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.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
测试URL时Java和c#代码的性能不同_C#_Http_Timeout - Fatal编程技术网

测试URL时Java和c#代码的性能不同

测试URL时Java和c#代码的性能不同,c#,http,timeout,C#,Http,Timeout,当运行下面的Java代码时,我会得到非常准确和一致的结果来确定我正在测试的网页是否正常 protected synchronized boolean checkUrl(HttpURLConnection connection){ boolean error = false; //HttpURLConnection connection = null; GregorianCalendar calendar = new GregorianCalendar(); tr

当运行下面的Java代码时,我会得到非常准确和一致的结果来确定我正在测试的网页是否正常

protected synchronized boolean checkUrl(HttpURLConnection connection){
    boolean error = false;
    //HttpURLConnection connection = null;
    GregorianCalendar calendar = new GregorianCalendar();

    try{
        if(connection != null){
            connection.connect();

            //200 is the expected HTTP_OK response
            error = processResponseCode(connection.getResponseCode());

            connection.disconnect();
        } else{
            error = false;
        }

    }catch(java.net.UnknownHostException uhe){
        ...     } 
    catch(Exception e){
        ...     }

    return error;
}
与c#中的Java模式最接近的匹配会产生更高的误报结果(主要是由于超时,其默认周期为100000毫秒)

我在c#中尝试了各种模式,以匹配引用的Java代码的有效性,但没有成功


有什么想法吗?

我认为这是因为您没有关闭任何请求对象。

我认为这是因为您没有关闭任何请求对象。

我认为您在C版本中缺少了GregoriaCalendar:-)


为什么在C版本中有两个请求对象?

我认为在C版本中缺少GregoriaCalendar:-)

为什么在C#版本中有两个请求对象?

还有:

   catch (Exception e)
   {
      throw e;
   }
只会销毁向上冒泡的异常上的堆栈跟踪。如果代码中的其他地方有错误处理,我建议删除try-catch块。否则,您应该记录异常并继续。不要只是抓住它扔掉它。

还有:

   catch (Exception e)
   {
      throw e;
   }
只会销毁向上冒泡的异常上的堆栈跟踪。如果代码中的其他地方有错误处理,我建议删除try-catch块。否则,您应该记录异常并继续。不要只是抓住它扔掉它。

简单地改变一下:

res = webreq.GetResponse();
connectedToUrl = processResponseCode(res);

(从早期版本中删除声明。)

在您尚未关闭/处理响应(或响应已完成)之前,它将保持连接。一次只能有一定数量(我相信默认情况下是2个)的连接到任何一台主机,因此超时。当您处理响应时,它允许另一个请求使用相同的连接。

只需更改以下内容:

res = webreq.GetResponse();
connectedToUrl = processResponseCode(res);

(从早期版本中删除声明。)



在您尚未关闭/处理响应(或响应已完成)之前,它将保持连接。一次只能有一定数量(我相信默认情况下是2个)的连接到任何一台主机,因此超时。当您处理响应时,它允许另一个请求使用相同的连接。

LOL。这是我今天看到的最好的诊断。我正在处理它,只是等待我的提交被纳入框架5中。;)我有两个对象,因为其中一个应该被注释掉。这是第四次迭代,有一些马虎的工件。这是我今天看到的最好的诊断。我正在研究它,只是等待我的提交被纳入框架5中。;)我有两个对象,因为其中一个应该被注释掉。这是第四次迭代,有一些马虎的工件。它们会不会超出范围?不,这还不够。确保调用在所使用的所有http相关对象上可以找到的任何close方法;)存在一些池,这就是您必须关闭的原因。在请求周围放置一个using块?它们是否会超出范围?不,这还不够。确保调用在所使用的所有http相关对象上可以找到的任何close方法;)有一些池在运行,这就是您必须关闭的原因。在请求周围放置一个using块?或者,在重试时使用正确的语法:或者,在重试时使用正确的语法:processResponseCode在检查URL时查看响应代码(401404200…)。那么我应该在using(…)中添加“res.close();”block?No-using语句的要点是,它就像一个try/finally,在finally块中调用Dispose。更新:超时消失。processResponseCode在检查URL时查看响应代码(401404200…)。所以我应该在using(…)中添加“res.Close();”block?No-using语句的要点是,它就像一个try/finally,在finally块中调用Dispose。Update:超时消失了。