我应该使用什么来优化我的 c# 代码?

What should I use to optimize my c# code?

提问人:Tech_Support_Scammer 提问时间:1/3/2022 更新时间:1/3/2022 访问量:187

问:

我正在做一个 codewars kata,它正在工作,但我超时了。 我在网上搜索了解决方案,寻求某种参考,但它们都是针对 java 脚本的。

这是套路:https://i.stack.imgur.com/yGLmw.png

这是我的代码:

public static int DblLinear(int n)
    {
        if(n > 0)
        {
            var list = new List<int>();
            int[] next_two = new int[2];
            list.Add(1);
            for (int i = 0; i < n; i++)
            {
                for (int m = 0; m < next_two.Length; m++)
                {
                    next_two[m] = ((m + 2) * list[i]) + 1;
                }
                if(list.Contains(next_two[0]))
                {
                    list.Add(next_two[1]);
                }
                else if(list.Contains(next_two[1]))
                {
                    list.Add(next_two[0]);
                }
                else
                list.AddRange(next_two);

                list.Sort();
            }
            return list[n];
        }
        return 1;
    }

这真的是一个缓慢的解决方案,但这似乎对我有用。

C# 数学 序列

评论

0赞 Danny Varod 1/3/2022
首先阅读代码并确定复杂性,例如 O(1)、O(logn)、O(n!)、...,然后尝试在探查器下运行以查看“热点”(搜索 .NET 代码探查器。

答:

0赞 JonasH 1/3/2022 #1

性能优化的第一条规则是测量。理想情况下,使用可以告诉您大部分时间花在哪里的分析器,但对于简单情况,使用一些秒表就足够了。

我猜大部分时间都会花在 上,因为这是线性查找,并且位于最里面的循环中。因此,一种方法是将列表更改为 a 以提供更好的查找性能,跳过 -call,并返回 hashSet 中的最大值。据我所知,这应该给出相同的结果。list.ContainsHashSet<int>.Sort

还可以考虑使用一些专用数据结构,这些结构比 .Net 中提供的常规容器更适合该问题。