如何将.NET中避免装箱的技巧转化为一个长尾词?

2026-04-13 17:236阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计942个文字,预计阅读时间需要4分钟。

如何将.NET中避免装箱的技巧转化为一个长尾词?

.NET提供struct类型,正确使用可减少对象数量,从而降低GC压力,提高性能。有时我会发现,某些同学有这方意义识,但有时过于懒散,结果没有获得相应效果。

.NET提供struct类型,正确使用可以减少对象数量,从而降低GC压力,提高性能。不过有时候我会发现,某些同学有这方面的意识,但是有时候一疏忽一偷懒,就没有得到相应的效果了。这里举一个真实的例子:假设我们要将一对int作为字典的键,用于映射到某些数据,那么你会怎么做?当然我们可以直接使用Tuple<int, int>,但这样就可能产生大量的对象。于是我们打算使用自定义的值类型:

如何将.NET中避免装箱的技巧转化为一个长尾词?

private struct MyKey { private readonly int _a; private readonly int _b; public MyKey(int a, int b) { _a = a; _b = b; } }

这么做正确吗?假如你做一下测试,会发现它已经可以“正确使用”了,但实际上还是错误的。我们用它来做字典的键,会依赖GetHashCodeEquals两个方法,由于MyKey没有提供这两个方法,就会自动使用System.ValueType里的实现,这便引起了装箱。

阅读全文

本文共计942个文字,预计阅读时间需要4分钟。

如何将.NET中避免装箱的技巧转化为一个长尾词?

.NET提供struct类型,正确使用可减少对象数量,从而降低GC压力,提高性能。有时我会发现,某些同学有这方意义识,但有时过于懒散,结果没有获得相应效果。

.NET提供struct类型,正确使用可以减少对象数量,从而降低GC压力,提高性能。不过有时候我会发现,某些同学有这方面的意识,但是有时候一疏忽一偷懒,就没有得到相应的效果了。这里举一个真实的例子:假设我们要将一对int作为字典的键,用于映射到某些数据,那么你会怎么做?当然我们可以直接使用Tuple<int, int>,但这样就可能产生大量的对象。于是我们打算使用自定义的值类型:

如何将.NET中避免装箱的技巧转化为一个长尾词?

private struct MyKey { private readonly int _a; private readonly int _b; public MyKey(int a, int b) { _a = a; _b = b; } }

这么做正确吗?假如你做一下测试,会发现它已经可以“正确使用”了,但实际上还是错误的。我们用它来做字典的键,会依赖GetHashCodeEquals两个方法,由于MyKey没有提供这两个方法,就会自动使用System.ValueType里的实现,这便引起了装箱。

阅读全文