如何确定哪个方法/类更具性能、内存效率和灵活性?

问题描述 投票:0回答:1

我想说我对编程世界还很陌生,我还有很多东西要学。因此,在 Zoom 讲座中,我们讨论了如何创建一个简单的 MonoGame 游戏,老师将每个纹理存储在一个变量中。我不会说这是最好的方法,您必须为每个纹理添加一个新变量。他应该使用某种数据结构,但我很确定他这样做了,因为这门大学课程(游戏开发、人工智能、系统开发等)是从教授 C# 基础知识开始的,所以你不应该事先了解有关编程的任何知识。我已经了解了该语言的一些基础知识。三四年前我的体育老师学会了它,从那时起就一直在玩它。

无论如何,我在课堂上有了一个新朋友,他似乎比我更擅长编程,编程时间是我的两倍,爸爸是程序员等等……这让我开始思考。我对上述问题的解决方案是这样的:

(这些例子是在VS中而不是MonoGame中使用List而不是List

 public static void LoadTextures(List<string> textures)
 {
     foreach (var texture in textures)
     {
         Textures.Add(texture.Trim());
     }
 }

我觉得这效果很好。但他的解决方案是这样的:

    public static void LoadTextures(string textures)
    {
        foreach (var texture in textures.Split(','))
        {
            Textures.Add(texture.Trim());
        }
    }

在我看来,该解决方案看起来比我的解决方案“干净”得多。分割字符串而不是使用列表,这非常酷。我知道 split 方法,但我从未想过在这里使用它。我想这需要经验。

但是我如何知道哪种方法在性能、内存效率、灵活性等方面最好......?我觉得他的解决方案看起来更顺眼,但是应该优先选择哪种方法呢?在我的方法中,我使用了一个列表并使用 foreach 循环遍历它。当他使用字符串时,将字符串转换为 int 数组并在 foreach 循环中使用该数组。所以我猜在这种情况下它是数组与列表,并且根据我的理解数组比列表更快并且需要更少的内存,所以我猜他的方法“更好”?

c# performance
1个回答
0
投票

您可以通过将逻辑上相同的项目(一方面是逗号分隔的值,另一方面是相同值的列表)传递给两者并测量所需的时间来比较两者。您可以使用相同的输入重复调用这两个函数,以解决由于其他进程和其他方面产生的白噪声而导致测量结果发生变化而导致的方差问题。

您还可以创建两大组输入,例如 testset1、testset2...,其中每个测试集代表使用逗号分隔值调用一个,使用列表调用另一个。

但是,您可以轻松预见您的性能会更高,因为即使列表项需要通过其地址在内存中找到,他的解决方案也需要一个字符串并将其拆分(这是一个成本高昂的操作,因为在需要找到并计算所有分隔符,需要分配一个数组,并且需要单独复制来自拆分的所有标记)。

因此,如果您想要数组,请使用数组作为输入实现相同的方法,例如(多年没有使用 C# 编写代码,如果有拼写错误,请原谅):

 public static void LoadTextures(string[] textures)
 {
     foreach (var texture in textures)
     {
         Textures.Add(texture.Trim());
     }
 }

除了性能问题,还有可用性问题。您的朋友通过硬编码分隔符分割字符串。为什么这会有帮助?如果他的方法收到的字符串中有另一个分隔符怎么办?而且,更糟糕的是,如果数据结构首先是数组或列表怎么办?调用者方法会将该集合混合成逗号分隔的字符串吗?考虑一下用法,因为方法有多大用处就有多有用。

© www.soinside.com 2019 - 2024. All rights reserved.