none
可否帮忙看下这块代码如何优化提升性能? RRS feed

  • 问题

  • 此代码用于将任意一个类型当中的字段全部提出以形成WEB请求参数,我已经用MAIN测试过了,基本可行,大家可否帮忙看下还有没有什么提升性能的空间:

    using System;
    using System.Reflection;
    using System.Text;
    
    namespace sts
    {
    
        class sts_utility
        {
            public static string struct_to_string(object structwithInfo)
            {
                //此函数要求与其相配合的外部程序传入的参数必须为只包括字段的结构
                /*此函数的功能:将任意一个类型中的字段提取出来进行整合,例如:将类似下面的结构:
                 
                 struct a
                 {
                     long key = 123456789;
                     string user="猪";
                     string key="pig";
                 }
                 转换成为:
                 ?key=123456789&user=猪&key=pig
                 */
                 
                StringBuilder tempstring = new StringBuilder("?");
    
                //准备使用反射
                Type mytype = structwithInfo.GetType();
    
                //提取类型中所有的字段
                FieldInfo[] fields = mytype.GetFields();
    
                foreach (FieldInfo f in fields)
                {
                    string i = f.Name;          //获取字段名称
                    string j = f.GetValue(structwithInfo).ToString();      //获取字段值
                    string k = i + "=" + j + "&";
                    tempstring.Append(k);
                }
    
                //删除字符串末尾多出来的一个"&"字符
                StringBuilder sb = tempstring.Remove((tempstring.Length-1), 1);
    
    
                return sb.ToString();
            }
        }
    }

    凝气神通
    2010年4月4日 23:12

答案

  • 应该都差不多了吧,.net平台下性能因素不用太多的考虑。

    如果一定要改的话,循环里可以改成

    tempstring.Append(f.Name).Append("=").Append(f.GetValue(structwithInfo).ToString()).Append("&");

    最后那个sb是多余的,跟tempstring完全是同一样东西,不过移除之前要先判断下里面有没有东西:

    if(tempstring.Length > 0) tempstring.Remove(..);

    return tempstring.ToString();

    就可以了。


    霸王
    • 已标记为答案 PALadinWIC 2010年4月7日 16:32
    2010年4月7日 4:22

全部回复

  • 应该都差不多了吧,.net平台下性能因素不用太多的考虑。

    如果一定要改的话,循环里可以改成

    tempstring.Append(f.Name).Append("=").Append(f.GetValue(structwithInfo).ToString()).Append("&");

    最后那个sb是多余的,跟tempstring完全是同一样东西,不过移除之前要先判断下里面有没有东西:

    if(tempstring.Length > 0) tempstring.Remove(..);

    return tempstring.ToString();

    就可以了。


    霸王
    • 已标记为答案 PALadinWIC 2010年4月7日 16:32
    2010年4月7日 4:22
  • 谢谢,因为这串代码是放在服务器而且可能要被反复调用的,所以我想尽可能的它他更快一点。
    凝气神通
    2010年4月7日 16:32