开发人员通常倾向于在代码中添加不必要的装箱,这可能会影响应用程序的性能。本文演示了避免该问题的低效和高效方法。
装箱是将值类型转换为对象类型的过程。换句话说,它意味着在堆而不是堆栈上分配对象。因此,由于内存使用量增加和垃圾回收需求,因此会产生性能开销。
在以下方案中,每次将值赋值时,它都会进行装箱,这可能会使应用程序遭受性能压力。
public interface INumber
{
object Value { get; set; }
}
public class Number : INumber
{
public object Value { get; set; }
}
请在下面找到使用泛型的上一个代码片段的重构版本,该代码段无需装箱即可实现类型安全。
public interface INumber<T>
{
T Value { get; set; }
}
public class Number<T> : INumber<T> // Utilize generics to avoid boxing
{
public T Value { get; set; }
}
var intNumber = new Number<int> { Value = 123 };
var floatNumber = new Number<float> { Value = 123.45f };
创建另一个名为的类,并添加以下代码片段GenericCustomInterfaces
public static class GenericCustomInterfaces
{
static List<INumber<int>> intNumbers = new List<INumber<int>>();
static List<INumber<double>> doubleNumbers = new List<INumber<double>>();
public static void Example()
{
// Populate the list with integers
for (int i = 0; i < 10; i++)
{
intNumbers.Add(new Number<int>(i));
}
// Populate the list with doubles
for (double d = 0.5; d < 10.0; d += 1.0)
{
doubleNumbers.Add(new Number<double>(d));
}
// Process and display integer numbers
Console.WriteLine("Integer Numbers:");
foreach (var num in intNumbers)
{
Console.WriteLine(num.Value);
}
// Process and display double numbers
Console.WriteLine("\nDouble Numbers:");
foreach (var num in doubleNumbers)
{
Console.WriteLine(num.Value);
}
}
}
添加接口及其类实现,如下所示
public interface INumber<T>
{
T Value { get; set; }
}
public class Number<T> : INumber<T>
{
public T Value { get; set; }
public Number(T value)
{
Value = value;
}
}
#region Day 29: Generics & Custom Interfaces
static string ExecuteDay29()
{
GenericCustomInterfaces.Example();
return "Executed Day 29 successfully..!!";
}
#endregion
Integer Numbers:
0
1
2
3
4
5
6
7
8
9
Double Numbers:
0.5
1.5
2.5
3.5
4.5
5.5
6.5
7.5
8.5
9.5
源代码获取:公众号回复消息【code:82684
】