Kev*_*son 10 c# performance lambda query-string
在研究如何将NameValueCollection转换为查询字符串时,我遇到了不同的方法.如果较短的lambda语法尽可能高效,我很好奇.
如何使用迭代函数将NameValueCollection转换为(Query)String.
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());
}
Run Code Online (Sandbox Code Playgroud)
将一个NameValueCollection加入到C#中的查询字符串中使用一个lambda表达式,看起来不错,但我不确定它是否是高效的代码.
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]))));
}
Run Code Online (Sandbox Code Playgroud)
Cor*_*rne 11
我会这样做:
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;
}
Run Code Online (Sandbox Code Playgroud)
这样你就可以创建更少的对象(必须由垃圾收集器清理)
首先,您能做的最好的事情就是测试并查看性能是否适合您的应用程序,我们可以告诉您有关性能的一般性信息,但最终取决于您的需求,只有您知道答案。
至于手头的问题,每当您使用委托(这是 lambda 创建的)而不是直接执行代码时,性能都会受到影响。在大多数情况下,命中是可以接受的,但如果此代码需要绝对最佳的性能(假设它位于内部循环中),那么您需要使用第一种方法。
也就是说,如果您正在创建查询字符串,那么您可能即将访问数据库,这可能比首先创建查询字符串的任何一种方法都要花费更长的时间。