C# 结构与类,带字符串和列表?

C# 结构与类,带字符串和列表?,c#,.net,vb.net,class,data-structures,C#,.net,Vb.net,Class,Data Structures,可能重复: 我正在创建一个库,它相对较小,需要一个数据库,包含MP3文件的标签 我知道,如果我有固定大小的数据,如整数、双精度等,最好还是坚持使用结构。。。但是在我的例子中,我有字符串和列表,其中包含字符串甚至其他结构。。。如果我使用结构,它将如下所示: Public Structure STitle Dim Title As String Dim Path As String End Structure Public Structure SAlbum Dim Alb

可能重复:

我正在创建一个库,它相对较小,需要一个数据库,包含MP3文件的标签

我知道,如果我有固定大小的数据,如整数、双精度等,最好还是坚持使用结构。。。但是在我的例子中,我有字符串和列表,其中包含字符串甚至其他结构。。。如果我使用结构,它将如下所示:

Public Structure STitle
    Dim Title As String
    Dim Path As String
End Structure

Public Structure SAlbum
    Dim Album As String
    Dim Songs As List(Of STitle)
End Structure

Public Structure SArtist
    Dim Artist As String
    Dim Albums As List(Of SAlbum)
End Structure
Public SongLibrary As New List(Of SArtist)
然后,我会有这样的东西:

Public Structure STitle
    Dim Title As String
    Dim Path As String
End Structure

Public Structure SAlbum
    Dim Album As String
    Dim Songs As List(Of STitle)
End Structure

Public Structure SArtist
    Dim Artist As String
    Dim Albums As List(Of SAlbum)
End Structure
Public SongLibrary As New List(Of SArtist)
字符串和列表让我很困惑,尤其是在速度方面。由于我将搜索很多歌曲,我想确保我使用的是最快的一首

我也对装箱和拆箱感到困惑。我假设字符串列表只包含指向该字符串的指针,对于试图考虑低级别的结构也是如此。但是,我不知道是否会发生装箱拆箱,这会减慢搜索速度,这是不使用ArrayList的原因,因为无法确定大小,或者是吗

那么选择哪一个呢?阶级,还是结构?还是有其他更合适的

我知道如果我有固定大小的数据,比如整数、双精度等,最好还是坚持使用结构

你怎么知道的?根据我的经验,创建自定义值类型很少是个好主意。这确实发生了——比如,我的野田佳彦时间计划中有很多——但通常我会很谨慎。在暴露可变结构之前,我也会非常小心

我也对装箱和拆箱感到困惑。我假设字符串列表只包含指向该字符串的指针,对于试图考虑低级别的结构也是如此

对于结构,没有指针引用。例如,整数列表是用整数实现的。数组直接包含这些值。对于泛型集合,不需要装箱

有关更多信息,请参见,但基本上我默认使用类,除非我有非常令人信服的理由创建结构

我知道如果我有固定大小的数据,比如整数、双精度等,最好还是坚持使用结构

你怎么知道的?根据我的经验,创建自定义值类型很少是个好主意。这确实发生了——比如,我的野田佳彦时间计划中有很多——但通常我会很谨慎。在暴露可变结构之前,我也会非常小心

我也对装箱和拆箱感到困惑。我假设字符串列表只包含指向该字符串的指针,对于试图考虑低级别的结构也是如此

对于结构,没有指针引用。例如,整数列表是用整数实现的。数组直接包含这些值。对于泛型集合,不需要装箱

有关更多信息,请参见,但基本上我默认使用类,除非我有非常令人信服的理由创建结构

字符串和列表让我很困惑,尤其是在速度方面。自从我 将搜索很多歌曲,我想确定我是 用最快的

不清楚您的案例中字符串和列表之间的关系,但快速搜索通常与数据在集合中的分布方式有关

最快的通常是:对集合进行排序并对其进行二进制搜索

特别是从快速数据检索的角度来看,不要使用结构,因为在从集合中检索结构数据时,数据将复制到另一个新对象。相反,对于类,您将得到一个非常有效的指针

使用引用类型类而不是结构

字符串和列表让我很困惑,尤其是在速度方面。自从我 将搜索很多歌曲,我想确定我是 用最快的

不清楚您的案例中字符串和列表之间的关系,但快速搜索通常与数据在集合中的分布方式有关

最快的通常是:对集合进行排序并对其进行二进制搜索

特别是从快速数据检索的角度来看,不要使用结构,因为在从集合中检索结构数据时,数据将复制到另一个新对象。相反,对于类,您将得到一个非常有效的指针


使用引用类型类而不是结构

我想我是从@GunDeniz了解到的:如果我有固定大小的数据,则与该链接中的指南不相关。例如,它没有说明逻辑上表示单个值或不可变。@JonSkeet:你能列出一个简短的理由吗。Thanks@SunnyMilenov:好吧,这个链接确实给了它们——但我绝对坚持让它们不可变,并表示一个单一的逻辑值。在野田佳彦之前,我很少创建任何自定义结构。有些时候,他们会给人以意义
ant性能提升,但这应该在评测等之后才能实现。我想我是从@GunDeniz了解到的:如果我有固定大小的数据,则与该链接中的指导信息不相关。例如,它没有说明逻辑上表示单个值或不可变。@JonSkeet:你能列出一个简短的理由吗。Thanks@SunnyMilenov:好吧,这个链接确实给了它们——但我绝对坚持让它们不可变,并表示一个单一的逻辑值。在野田佳彦之前,我很少创建任何自定义结构。有时,它们会显著提高性能,但这应该在评测等之后才能实现。请记住,使用结构并不仅仅是让一切都变得更快,就像魔术一样。在您的情况下,使用结构不太可能获得性能提升。请记住,使用结构不仅仅会让一切都变得更快,就像魔术一样。在您的情况下,使用结构不太可能提高性能。基于散列的搜索通常比排序集合上的二进制搜索快得多,只要类型可以有效地快速散列。我的意思是从包含字符串列表甚至其他结构的列表访问结构。它就像x->y->z->t。问题是,哪个访问结构或访问类或其他更快?@GunDeniz:performance主题与上下文非常相关,但一般来说,如果您对搜索性能持谨慎态度,请坚持使用类,因为答案中解释的原因。@GunDeniz:你有证据表明结构和类之间的差异在你的应用程序中是非常重要的吗?任何IO都可能使这类事情相形见绌。。。您应该设计清晰易用的API,而不是在此阶段尝试微优化。基于哈希的搜索通常比排序集合上的二进制搜索快得多,只要类型可以有效地快速散列,我的意思是从包含字符串列表或其他结构的列表访问结构。它就像x->y->z->t。问题是,哪个访问结构或访问类或其他更快?@GunDeniz:performance主题与上下文非常相关,但一般来说,如果您对搜索性能持谨慎态度,请坚持使用类,因为答案中解释的原因。@GunDeniz:你有证据表明结构和类之间的差异在你的应用程序中是非常重要的吗?任何IO都可能使这类事情相形见绌。。。您应该设计清晰易用的API,而不是在此阶段尝试微优化。