Ist die Konvertierung einer NameValueCollection an einen querystring mit einem c# - lambda-effizient?
In der Erforschung, wie die Konvertierung einer NameValueCollection an einen querystring, habe ich über verschiedene Methoden. Ich bin gespannt, ob die kürzere lambda-syntax ist so effizient wie es sein könnte.
Wie konvertiert NameValueCollection zu einem (Query -) String mit einer Funktion Durchlaufen.
public static String ConstructQueryString(NameValueCollection parameters)
{
List<String> items = new List<String>();
foreach (String name in parameters)
items.Add(String.Concat(name, "=", System.Web.HttpUtility.UrlEncode(parameters[name])));
return String.Join("&", items.ToArray());
}
Join ein NameValueCollection-in einen querystring-Parameter in C# verwendet einen lambda-Ausdruck, der sieht nett aus, aber ich bin mir nicht sicher, ob es effizienten code.
private static string JoinNvcToQs(NameValueCollection qs)
{
return string.Join("&", Array.ConvertAll(qs.AllKeys, key => string.Format("{0}={1}", HttpUtility.UrlEncode(key), HttpUtility.UrlEncode(qs[key]))));
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zuerst von allen, ist die beste Sache, die Sie tun können, ist zu testen und sehen, ob die Leistung akzeptabel ist für Ihre Anwendung, wir können Ihnen sagen, Allgemeinheiten über die Leistung, aber am Ende kommt es auf Ihre Bedürfnisse und nur Sie wissen die Antworten.
Als die Frage auf der hand, jedes mal, wenn Sie einen Delegaten (das ist, was ein lambda-Ausdruck erstellt wird) anstatt das ausführen von code direkt werden Sie einen performance-hit. In den meisten Fällen wird der Treffer ist akzeptabel, aber wenn dieser code muss die absolute beste mögliche Leistung (sagen, es ist in einer inneren Schleife), dann müssen Sie gehen mit Ihrem ersten Methode.
Sagte, dass, wenn Sie einen querystring, vermutlich bist du über die hit-Datenbank, die wird wahrscheinlich wesentlich länger dauern als die beiden Methoden der Erstellung der querystring in den ersten Platz.
Ich würde es so machen:
Diese Weise erzeugen Sie weniger Objekten (, die bereinigt werden müssen, die von der garbage-collector)
parameters.GetValues(key)
.NameValueCollection ist
ToString
Methode bauen Sie die Abfrage-string für Sie. Ich bin noch nicht zum benchmarking, aber ich könnte mir vorstellen, dass die Umsetzung effizienter wäre als etwas mit lambdas oder foreach.(Die
ToString
Lösung scheint nicht gut dokumentiert sein; ich fand nur, weil diese Antwort verwendet, es in einem code-Beispiel.)