问题标签 [boxing]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
345 浏览

.net - 在 DLR 中避免不必要的装箱

我正在玩 DLR 以更好地理解它。我还不完全熟悉它的所有概念和术语,因此对我的问题中的任何术语或概念错误感到抱歉。

基本上,我理解的方式是在表达式树中传递对象,但使用绑定器将对象的动态功能公开给其他支持 DLR 的语言。因此,不是直接在表达式树中进行添加(例如,使用 Expression.Add),而是创建一个绑定器,调用站点在需要时调用该绑定器并为您执行添加。

但是,由于您传递对象,因此在加法操作结束时(例如,如果操作数是两个 Int32 值),您将不得不将生成的 Int32 装箱到一个对象,因为(仍在活页夹中)调用什么网站预计。我有点担心这种不断的装箱/拆箱可能会在一定程度上影响运行时的性能。

这真的是它应该如何工作(所有装箱/拆箱)还是我错过了什么?

0 投票
2 回答
885 浏览

c# - C# 编译器 + 带有装箱的通用代码 + 约束

让我们检查为以下通用方法生成的 MSIL 代码:

看:

但是对于上面的通用代码,更有效的 IL 表示应该是:

从约束中可知,该值被装箱到引用类型中。Unbox.anyopcode 是完全多余的,因为在boxopcode 之后,IL 堆栈中的值已经是对 的有效引用!!U,无需任何拆箱即可使用。

为什么 C# 3.0 编译器不使用约束元数据来生成更高效的通用代码?Unbox.any 的开销很小(只是慢了 4 到 5 倍),但为什么不在这种情况下发出更好的代码呢?

0 投票
1 回答
2250 浏览

java - 当类已知时创建(装箱)原始实例

我需要一个返回所提供类类型实例的方法。让我们假设提供的类型仅限于可以创建它们的“空”实例。例如,提供String.class将返回一个空字符串,提供一个Integer.class将返回一个初始值为零的整数,等等。但是我如何动态创建(盒装)原始类型?像这样?

是遍历所有可能的原始类型的唯一解决方案,还是有更直接的解决方案?请注意,两者

抛出一个InstantiationException(因为它们没有空构造函数)。

0 投票
2 回答
541 浏览

c# - 将条件运算符与 IsAjaxRequest 结合使用以返回 ActionResult

Mvc.JsonResult由于and之间没有隐式转换,因此Mvc.ViewResult我不能只使用条件运算符,而是以强制转换结束。

这让我想到了我的问题是我会为拳击 JsonResult 带来的性能损失值得还是我应该做一个正常的if...else块?

下面的代码出现在一个普通的控制器动作中:public ActionResult Inactivate()

没有拳击

VS拳击

0 投票
2 回答
1142 浏览

c# - 如何防止拆箱 - 读取任意 sql 行时装箱内存开销

我正在编写一个类来表示 SQL 查询中的一行。我希望通过类的 indexer 属性访问字段数据。如果我将数据加载到内部对象列表中,这很简单。我已经尝试过这个并且对原始人的拳击不满意。拳击增加了 20% 的内存需求。我想将原语存储为类中的原语。DataTable 类通过为从 IDataReader 返回的架构中的每一列创建数组来存储基元。我以这种方式实现了一个类,但我更喜欢将数据与行对象一起存储,而不是存储在行内部引用的列中。

有什么想法可以做到这一点吗?

0 投票
5 回答
701 浏览

c# - 可变数量的参数而不装箱值类型?

上述签名的问题在于,将传递给该方法的每个值类型都将被隐式装箱,这对我来说是严重的性能问题。

有没有办法在不装箱值类型的情况下清除接受可变数量参数的方法?

谢谢。

0 投票
5 回答
1062 浏览

java - 内部编译器错误 ArrayIndexOutOfBoundsException: -1 ... generateUnboxingConversion

尝试编译时遇到了一些奇怪的异常:

这是一个有效的检查(拆箱-隐式强制转换-拆箱)吗?

0 投票
8 回答
7352 浏览

c# - 装箱和拆箱:什么时候出现?

所以我明白什么是装箱和拆箱。它什么时候出现在现实世界的代码中,或者在什么例子中它是一个问题?我无法想象做这样的例子:

...但这几乎可以肯定是过于简单化了,我什至可能在以前不知道的情况下完成了装箱/拆箱。

0 投票
6 回答
9471 浏览

c# - 为什么结构需要装箱?

在 C# 中,任何用户定义struct都会自动成为 System.Struct 的子类 System.ValueTypeSystem.Struct System.ValueTypeSystem.Object.

但是当我们将一些结构分配给对象类型引用时,它会被装箱。例如:

所以我的问题是:如果A是 的后代System.Object,编译器不能将其向上转换为对象类型而不是装箱吗?

0 投票
4 回答
3549 浏览

java - Java 自动拆箱 - 是否有编译器警告?

我是 Java 自动装箱的忠实粉丝,因为它节省了很多丑陋的样板代码。但是,我发现在 Number 对象可能为空的某些情况下,自动拆箱会让人感到困惑。有什么方法可以检测代码库中发生自动拆箱的位置并带有 javac 警告?任何其他仅检测拆箱事件的解决方案(例如 FindBugs 或 Eclipse 特定的编译器警告)将不胜感激,因为我找不到任何解决方案。

为了澄清,我不希望在装箱时产生任何警告 - 只拆箱。

下面是一些可能导致混淆 NullPointerExceptions 的代码的简单示例: