RestClient.Execute() is extremely slow compared to RestClient.ExecuteAsync().Result
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Accessibilité débutants
- 45/100
- Type d'issue
- Bug
- Clarté
- Plutôt claire
- Activité
- Calme
- Stack technique
- csharp
- Domaine
- backend-api-design
Piste de recherche
Commencez par suivre les points d’entrée RestClient.Execute() et RestClient.ExecuteAsync(), puis reproduisez la différence de temps avec l’exemple Parallel.For fourni sur .NET 8. Comparez leurs chemins d’exécution synchrones en utilisation parallèle, puis vérifiez que les appels équivalents présentent des performances comparables et que le délai signalé est résolu.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Describe the bug
RestClient.Execute() is extremely slow compared to RestClient.ExecuteAsync().Result, when called in a parallel setting, even though both are synchronous.
To Reproduce
private class CustomInterceptor : Interceptor
{
public override ValueTask BeforeDeserialization ( RestResponse response, CancellationToken cancellationToken )
{
response.ContentType = ContentTypes.application_json;
return ValueTask.CompletedTask;
}
}
static void Test02 ()
{
//
const int total = 100;
int width = ( int ) Math.Ceiling( Math.Log10( total ) );
( int, TimeSpan )[] elapsed = new ( int, TimeSpan )[total];
//
RestResponse Execute ( RestClient c, string resource, Method method, Action<RestRequest> callback )
{
//
RestRequest i;
RestResponse o;
//
if ( c == null )
throw new ArgumentNullException( nameof( c ) );
i = new RestRequest( resource, method );
callback?.Invoke( i );
i.Interceptors = [];
i.Interceptors.Add( new CustomInterceptor() );
o = c.Execute( i );
return o;
}
void Test ( int i )
{
//
Stopwatch watch;
//
static void Add ( RestRequest t )
{
t.AddHeader( HTTPHeaders.Content_Type, ContentTypes.application_json );
}
watch = Stopwatch.StartNew();
using ( var c = new RestClient( some server ) )
Execute( c, "", Method.Post, Add );
watch.Stop();
elapsed[i] = ( i, watch.Elapsed );
}
Parallel.For( 0, total, Test );
////
Array.Sort( elapsed, ( x, y ) => y.Item2.CompareTo( x.Item2 ) );
for ( int i = 0; i < total; i++ )
Console.WriteLine( $@"{elapsed[i].Item1.ToString().PadLeft( width )} => {elapsed[i].Item2:mm\:ss\.fff}" );
}
If you use the above code, which uses c.Execute( i ), to communicate to a server, there will be very long delays (up to roughly 10 s). If you replace c.Execute( i ) with c.ExecuteAsync( i ).Result, the time is reduced to just roughly 1 s.
Expected behavior
Since both RestClient.Execute() and RestClient.ExecuteAsync().Result are synchronous, both should have the exact same performance.
Desktop
- OS: Windows 11
- .NET 8.0
- Version 114.0.0
- Langage dominant
- C#
- Étoiles
- 9.8k
- Forks
- 2.3k
- Métriques de merge des PR
- Aucune PR mergée en 30 j
Préparer son environnement
Lance le conteneur de développement du projet dans votre navigateur, avec votre propre compte GitHub.
- Aucun Dockerfile ni fichier Docker Compose
- Propose un modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de restsharp/RestSharp
-
RestClientOptions.UserAgent missing from requests with useClientFactory: truePeut-être pris Une pull request liée à cette issue est ouverte ou déjà fusionnée. Ouvertebug
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
-
Expose HTTP response trailers on RestResponsePeut-être pris @Benziza l’a pris il y a 22 jours. Ouverte
Difficulté 4/5 3-5 jours Accessibilité débutants 68/100
-
RestClient configured with Newtonsoft.Json serializer still instantiates System.Text.JsonPeut-être pris @JiuYue0820 l’a pris il y a 63 jours. Ouvertebug
Difficulté 3/5 1-2 jours Accessibilité débutants 65/100
-
bug
Difficulté 4/5 3-5 jours Accessibilité débutants 48/100
-
feature-request rfc
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 25/100
Toutes les issues de restsharp/RestSharp
Issues similaires
-
bug priority: P2
Difficulté 1/5 1-3 heures Accessibilité débutants 84/100
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 77/100
Les mainteneurs répondent en général sous 1 jour
-
[Docs] README/PRIVACY still name AppCenter although v1.5.6.0+ uses the Microsoft Store Services SDKOuverte
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
-
needs-triage
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
Azure/azure-sdk-tools#17317 ·
Les mainteneurs répondent en général sous 1 jour
-
bug
Difficulté 2/5 1-3 heures Accessibilité débutants 66/100
swisstopo/swissgeol-boreholes-suite#3086 ·
Les mainteneurs répondent en général sous 1 jour