c# - 这真的是节省分配吗?

标签 c#

我在静态 Utility 类中有以下内容:

static int[] MonthDays = new int[] {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31};
public static int[] GetListOfAllDaysForMonths()
{
    return MonthDays;
}

现在通过在代码中的多个位置调用 GetListOfAllDaysForMonths() 是否有效,我可以避免每次调用此方法时都必须分配和创建一个新的 int[]?

更新:让它只读

 static readonly int[] 

最佳答案

是的,但您也对一些有趣的副作用持开放态度。考虑一下:

int[] a = GetListOfAllDaysForMonths();
a[3] = 200;
int[] b = GetListOfAllDaysForMonths();
Console.WriteLine(b[3]);  // prints 200

更新
鉴于预期用途(下拉列表中日期的默认数字),您将需要许多(我的意思是许多,如数十万或数百万)此类列表以进行此类优化有所作为。我不会花时间从内存分配的角度来优化它;它根本不值得。

现在,我建议您只让一个方法返回一个新的 int[] (显示为 IEnumerable<int> )以及每次通话的号码。然后,在以后,如果您碰巧发现这会导致内存或性能问题,那么您可以优化该方法。

关于c# - 这真的是节省分配吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1646306/

相关文章:

c# - ASP.Net 核心 : Hundreds of Build Errors Suddenly

java - 连接json-rpc接口(interface)

c# - 无法将参数值从字符串转换为 Guid c# aspx

c# - Lambda 表达式 - 如何从 IEnumerable<Object> 向 where 子句提供值?

c# - WPF窗口无法从Revit ExternalCommand初始化

c# - 使用 datetime.now 以 YYYYMM 格式检索年份和月份

c# - 如何使用 C# 暂停 MP3 文件?

c# - UWP应用程序不断抛出未经授权的访问异常

c# - 无法加载文件或程序集 'log4net

c# - 使用 WriteFileAsync 附加到文件