Is converting a NameValueCollection to a querystring using a c# lambda efficient?

前端 未结 3 948
臣服心动
臣服心动 2021-02-20 14:59

In researching how to convert a NameValueCollection to a querystring, I have come across different methods. I am curious if the shorter lambda syntax is as efficient as it coul

相关标签:
3条回答
  • 2021-02-20 15:19

    I would do it like this:

    public static string ConstructQueryString(NameValueCollection parameters)
    {
        var sb = new StringBuilder();
    
        foreach (String name in parameters)
            sb.Append(String.Concat(name, "=", System.Web.HttpUtility.UrlEncode(parameters[name]), "&"));
    
        if (sb.Length > 0)
            return sb.ToString(0, sb.Length - 1);
    
        return String.Empty;
    } 
    

    This way you create less objects (that have to be cleaned up by the garbage collector)

    0 讨论(0)
  • 2021-02-20 15:20

    NameValueCollection's ToString method will build the query string for you. I haven't done any benchmarking, but I'd imagine the implementation would be more efficient than something using lambdas or foreach.

    (The ToString solution doesn't seem to be well-documented; I only found it because this answer used it in a code sample.)

    0 讨论(0)
  • 2021-02-20 15:34

    First of all, the best thing you can do is test and see if the performance is acceptable for your application, we can tell you generalities about performance but in the end it comes down to your needs and only you know the answers to that.

    As to the question at hand, any time you use a delegate (which is what a lambda creates) rather than executing the code directly you'll take a performance hit. In most cases the hit is acceptable but if this code needs the absolute best possible performance (say it's in an inner loop) then you need to go with your first method.

    That said, if you're creating a querystring, presumably you're about to hit the database which will likely take considerably longer than either method of creating the querystring in the first place.

    0 讨论(0)
提交回复
热议问题