La conversion d’une NameValueCollection en chaîne de requête utilisant ac # lambda est-elle efficace?

En cherchant comment convertir une collection NameValueCollection en chaîne de requête, j’ai rencontré différentes méthodes. Je suis curieux de savoir si la syntaxe lambda plus courte est aussi efficace qu’elle pourrait l’être.

Comment convertir NameValueCollection en chaîne (de requête) à l’ aide d’une fonction itérative.

public static Ssortingng ConstructQuerySsortingng(NameValueCollection parameters) { List items = new List(); foreach (Ssortingng name in parameters) items.Add(Ssortingng.Concat(name, "=", System.Web.HttpUtility.UrlEncode(parameters[name]))); return Ssortingng.Join("&", items.ToArray()); } 

Rejoindre une NameValueCollection dans une chaîne de requête en C # utilise une expression lambda, ce qui est joli, mais je ne suis pas sûr qu’il s’agisse d’un code efficace.

 private static ssortingng JoinNvcToQs(NameValueCollection qs) { return ssortingng.Join("&", Array.ConvertAll(qs.AllKeys, key => ssortingng.Format("{0}={1}", HttpUtility.UrlEncode(key), HttpUtility.UrlEncode(qs[key])))); } 

    Tout d’abord, la meilleure chose à faire est de tester et de vérifier si les performances sont acceptables pour votre application. Nous pouvons vous donner des informations générales sur les performances, mais en fin de compte, cela dépend de vos besoins et vous seul en connaissez les réponses.

    En ce qui concerne la question à traiter, chaque fois que vous utilisez un délégué (c’est ce que crée un lambda) plutôt que d’exécuter le code directement, vous perdez de la performance. Dans la plupart des cas, le résultat est acceptable, mais si ce code requirejs les meilleures performances possibles (disons qu’il est dans une boucle interne), vous devez utiliser votre première méthode.

    Cela dit, si vous créez une chaîne de requête, vous êtes probablement sur le sharepoint bash la firebase database, ce qui prendra probablement beaucoup plus de temps que l’une ou l’autre méthode de création de la chaîne de requête.

    Je le ferais comme ça:

     public static ssortingng ConstructQuerySsortingng(NameValueCollection parameters) { var sb = new SsortingngBuilder(); foreach (Ssortingng name in parameters) sb.Append(Ssortingng.Concat(name, "=", System.Web.HttpUtility.UrlEncode(parameters[name]), "&")); if (sb.Length > 0) return sb.ToSsortingng(0, sb.Length - 1); return Ssortingng.Empty; } 

    De cette façon, vous créez moins d’objects (qui doivent être nettoyés par le ramasse-miettes)

    La méthode ToSsortingng de NameValueCollection construira la chaîne de requête pour vous. Je n’ai pas fait d’parsing comparative, mais j’imagine que la mise en œuvre serait plus efficace que quelque chose utilisant lambdas ou foreach.

    (La solution ToSsortingng ne semble pas être bien documentée; je ne l’ai trouvée que parce que cette réponse l’a utilisée dans un exemple de code.)