• 代码优化


    1.使用string.Empty或null不使用“”

    2.

    很多时候,我们在选择循环的时候,会考虑用那个循环好一点,这个好一点就是指效果高一点!今天我对于for, foreach循环做了个性能测试,测试代码如下:

    // Performance test of for loop.      

    private void ForLoopPerformance()      

    {         

    System.Diagnostics.Debug.WriteLine("ForLoopPerformance: ");

    string[] array = new string[10000000];

    DateTime d1 = DateTime.Now;         

    for (int i = 0; i < array.Length; i++)         

    {            

      Console.Write(array[i]);         

    }         

    System.Diagnostics.Debug.WriteLine(DateTime.Now.Ticks - d1.Ticks);

            

    DateTime d2 = DateTime.Now;         

    int len = array.Length;         

    for (int i = 0; i < len; i++)         

    {            

      Console.Write(array[i]);         

    }         

    System.Diagnostics.Debug.WriteLine(DateTime.Now.Ticks - d2.Ticks);

            

    DateTime d3 = DateTime.Now;         

    foreach (string str in array)         

    {

                Console.Write(str);         

    }         

    System.Diagnostics.Debug.WriteLine(DateTime.Now.Ticks - d3.Ticks);      

    }

    运行结果如下(每次运行结果会有差异):

    ForLoopPerformance: 
    2904263  // for
    2804116  // for
    2703969  // foreach

    结论:

    foreach性能最好,其次就是第二个for循环,因为相对于第一个来说,第二个for循环只要进行一个array.GetLength来获取数组的最大下标!

    当然了,这个结论也不是绝对的,在选择for, foreach的时候,应该考虑以下几点:

    1. 如果只是读数据,优先选择foreach,因为效率高,而且代码简单,方便;

    2. 如果要写数据,就只能选择for了,而且选择第二个for效率更高!

    3.

    在程序中经常会遇到对字符串或是对象判断null的操作,如果为null则给空值或是一个指定的值。通常我们会这样来处理

    string name = value;
    if (name == null)
    {
        name = string.Empty;
    }

    可以使用三元操作符(?:)对上面对吗进行优化

    string name = value == null ? string.Empty : value;

    这样使代码简洁了不少,但这还不是最简洁的,我们还可以使用??操作符来进行进一步优化,??操作符意思是如果为null取操作符左边的值,否则取右边的值。

    string name = value ?? string.Empty;

    我们甚至可以写一个扩展方法来过滤掉null和空格,使返回的结果可以更好的使用??操作符

    public static class StringUtility
    {
        public static string TrimToNull(string source)
        {
            return string.IsNullOrWhiteSpace(source) ? null : source.Trim();
        }
    }

    使用代码如下:

    string name = string.TrimToNull(value) ?? "None Specified";

    2 使用As转换类型

    在C#中进行类型转换有很多种方式比如可以进行强制类型转换,通常在转换前会使用Is进行类型的判断,所以您可能经常写过或见过类似下面的代码

    if (employee is SalariedEmployee)
    {
        var salEmp = (SalariedEmployee)employee;
        pay = salEmp.WeeklySalary;
        // ...
    }

    上面的代码不会报异常,但在整个过程中做了两次转换操作,这样会降低性能。我们可以使用as操作符来进行类型的转换,同样也不会报异常,如果类型不兼容则返回null,而是用as进行转换整个过程只转换一次。代码如下:

    var salEmployee = employee as SalariedEmployee;
    if (salEmployee != null)
    {
        pay = salEmployee.WeeklySalary;
        // ...
    }

    3 自动属性

    自动属性是C#3.0以上版本中的新功能,可以使代码变得更简洁,在以前定义属性我们会写如下代码

    public class Point
    {
        private int _x, _y;
    
        public int X
        {
            get { return _x; }
            set { _x = value; }
        }
        public int Y
        {
            get { return _y; }
            set { _y = value; }
        }
    }

    使用自动属性代码就会简洁了很多

    public class Point
    {
        public int X { get; set; }
        public int Y { get; set; }
    }

    在自动属性中,我们可以给get或set访问器设置访问级别,使属性变成只读属性或是只写属性

    public class Asymetrical
    {
        public string ThisIsReadOnly { get; private set; }
        public double ThisIsWriteOnly { private get; set; }
    }
  • 相关阅读:
    实现Callable接口实现多线程
    匿名内部类方式实现
    实现Runnable接口方式
    后台线程
    继承Thread类
    线程中断详解
    第六章、Linux 的档案权限不目彔配置
    安装virtual box
    CISCO实验记录六:EIGRP路由协议
    zabbix监控项整理Items-key
  • 原文地址:https://www.cnblogs.com/varorbc/p/4271654.html
Copyright © 2020-2023  润新知