相关疑难解决方法(0)

是DateTime.Now是测量函数性能的最佳方法吗?

我需要找到一个瓶颈,并且需要准确地测量时间.

以下代码段是衡量性能的最佳方法吗?

DateTime startTime = DateTime.Now;

// Some execution process

DateTime endTime = DateTime.Now;
TimeSpan totalTimeTaken = endTime.Subtract(startTime);
Run Code Online (Sandbox Code Playgroud)

.net c# performance datetime timer

466
推荐指数
14
解决办法
6万
查看次数

LINQ扩展方法的顺序不影响性能?

我很惊讶,无论我是在前置还是附加LINQ扩展方法都没关系.

经测试Enumerable.FirstOrDefault:

  1. hugeList.Where(x => x.Text.Contains("10000")).FirstOrDefault();
  2. hugeList.FirstOrDefault(x => x.Text.Contains("10000"));

    var hugeList = Enumerable.Range(1, 50000000)
        .Select(i => new { ID = i, Text = "Item" + i });
    
    var sw1 = new System.Diagnostics.Stopwatch();
    var sw2 = new System.Diagnostics.Stopwatch();
    
    sw1.Start();
    for(int i=0;i<1000;i++)
        hugeList.Where(x => x.Text.Contains("10000")).FirstOrDefault();
    sw1.Stop();
    
    sw2.Start();
    for(int i=0;i<1000;i++)
        hugeList.FirstOrDefault(x => x.Text.Contains("10000"));
    sw2.Stop();
    
    var result1 = String.Format("FirstOrDefault after: {0} FirstOrDefault before: {1}", sw1.Elapsed,  sw2.Elapsed);
    //result1: FirstOrDefault after: 00:00:03.3169683 FirstOrDefault before: 00:00:03.0463219
    
    sw2.Restart();
    for (int i = 0; i < 1000; i++) …
    Run Code Online (Sandbox Code Playgroud)

.net c# linq

20
推荐指数
2
解决办法
2368
查看次数

为什么OrderBy返回IOrderedEnumerable <T>比Sort快得多?

这是对C#Sort和OrderBy这个优秀问题的跟进比较.我将使用相同的示例:

List<Person> persons = new List<Person>();
persons.Add(new Person("P005", "Janson"));
persons.Add(new Person("P002", "Aravind"));
persons.Add(new Person("P007", "Kazhal"));
Run Code Online (Sandbox Code Playgroud)

争论的方法是:

persons.Sort((p1, p2) => string.Compare(p1.Name, p2.Name, true));
//and
persons.OrderBy(n => n.Name);
Run Code Online (Sandbox Code Playgroud)

首先让我说,我理解没有任何重大的性能差异需要担心.但我很想知道为什么OrderBy表现得比这更好Sort.我正在使用@phoog在原始问题中发布的答案.

private void button1_Click(object sender, EventArgs e)
{
    IEnumerable<Person> people;

    BenchMark(persons => persons.Sort((p1, p2) => string.Compare(p1.Name, p2.Name, true)));

    BenchMark(persons => people = persons.OrderBy(n => n.Name));
}

private static Random randomSeed = new Random();
public static string RandomString(int size, bool lowerCase)
{
    var sb = new StringBuilder(size); …
Run Code Online (Sandbox Code Playgroud)

.net c# linq sorting collections

20
推荐指数
2
解决办法
6133
查看次数

为什么List <>.OrderBy LINQ比IComparable + List <>更快.在Debug模式下排序?

我感兴趣的是使用LINQ对类进行排序,或者实现IComparable接口和List.Sort是否会更快.当LINQ代码更快时,我感到非常惊讶.

为了进行测试,我创建了一个非常简单的类,其中包含不太合适的TestSort名称,实现了IComparable.

class TestSort: IComparable<TestSort>  {
    private int age;
    private string givenName;

    public int Age {
        get {
            return age;
        }
        set {
            age = value;
        }
    }

    public string GivenName {
        get {
            return givenName;
        }
        set {
            givenName = value;
        }
    }

    public TestSort(int age, string name) {
        this.age = age;
        this.givenName = name;
    }

    public int CompareTo(TestSort other) {
        return this.age.CompareTo(other.age);
    }
}
Run Code Online (Sandbox Code Playgroud)

然后是一个简单的程序来对它进行多次排序 - 排序比复制列表要贵得多,因此可以忽略它的效果.

class Program {
    static void Main(string[] args) {
        // Create the …
Run Code Online (Sandbox Code Playgroud)

c# linq sorting benchmarking

13
推荐指数
1
解决办法
1万
查看次数

标签 统计

c# ×4

.net ×3

linq ×3

sorting ×2

benchmarking ×1

collections ×1

datetime ×1

performance ×1

timer ×1