Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.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
Java和;C#BigQuery客户端API?_Java_C#_Google Bigquery_Google Api Dotnet Client - Fatal编程技术网

Java和;C#BigQuery客户端API?

Java和;C#BigQuery客户端API?,java,c#,google-bigquery,google-api-dotnet-client,Java,C#,Google Bigquery,Google Api Dotnet Client,我们最近正从Java转换到c#,我们发现数据流API的性能有很大的不同: C#: await BigQueryService.Tabledata.InsertAll(request, ProjectId, DataSetId, TableId).ExecuteAsync(); Java: BigQueryService.tabledata.insertAll(ProjectId, DataSetId, TableId,request).execute(); 在我们的测试中,我们使用C#API调

我们最近正从Java转换到c#,我们发现数据流API的性能有很大的不同:

C#: await BigQueryService.Tabledata.InsertAll(request, ProjectId, DataSetId, TableId).ExecuteAsync();
Java: BigQueryService.tabledata.insertAll(ProjectId, DataSetId, TableId,request).execute();
在我们的测试中,我们使用C#API调用在一秒钟内得到的响应不到25个,但是使用javaapi平均每秒可以得到35个响应。 (我们在调用上述API之前记录一个“request send”日志,在从上述API获取响应对象之后记录一个“response get”日志。并且,我们在同一台机器上使用相同的数据集合进行了测试)

编辑

好的,我深入研究了API源代码,跟踪了它,然后编写了一个直接使用HttpClient的简单调用。以下是通话的情况(不是完美的,但只是想尽可能深入地分解时间成本):

这里的“StringContent”平均为160KB,而压缩内容平均为16KB。我在64位Windows Server 2012 R2上,有两个4核处理器,24GB RAM,1 Gbps网络连接


根据秒表结果,每个成功的httpclient调用的平均时间超过10秒,并且可以达到40秒以上的突发高峰。不知何故,这对我来说没有多大意义,但我想不出一个理由

.NET Bigquery API版本:Google.API.Bigquery.v2 1.9.2.2210是否可以添加有关计算机、Windows版本等的更多详细信息?如果使用非异步版本会发生什么。只是“执行”?@peleyal谢谢你的建议,我更新了上面的更多细节。我没有使用非异步版本,因为我在整个解决方案中都是异步的,我认为使用同步版本不是一个正确的选择。
string requestUri = BaseUri + string.Format("/projects/{0}/datasets/{1}/tables/{2}/insertAll", projectId, datasetId,tableId);
var serializedObject = BigQueryService.SerializeObject(request);
HttpContent content = new StringContent(serializedObject, Encoding.UTF8, "application/json");
content = await CompressAsync(content);
using (HttpRequestMessage httpRequest = new HttpRequestMessage(HttpMethod.Post, requestUri)
{
     Version = Version.Parse("1.1"),
     Content = content
})
{
     Stopwatch sw1 = Stopwatch.StartNew();
     await _staticCredential.InterceptAsync(httpRequest, ct).ConfigureAwait(false);
     sw1.Stop();
     Stopwatch sw2 = Stopwatch.StartNew();
     HttpResponseMessage returnMsg =  await HttpClient.SendAsync(httpRequest,ct);
     // HttpResponseMessage returnMsg = await HttpClient.PostAsync(requestUri,content,ct);
     sw2.Stop();
     Logger.Trace("Credential.InterceptAsync~{0}~HttpClient.SendAsync~{1}", sw1.ElapsedMilliseconds, sw2.ElapsedMilliseconds);
     return returnMsg;
 }