问题标签 [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.
.net - 在 DLR 中避免不必要的装箱
我正在玩 DLR 以更好地理解它。我还不完全熟悉它的所有概念和术语,因此对我的问题中的任何术语或概念错误感到抱歉。
基本上,我理解的方式是在表达式树中传递对象,但使用绑定器将对象的动态功能公开给其他支持 DLR 的语言。因此,不是直接在表达式树中进行添加(例如,使用 Expression.Add),而是创建一个绑定器,调用站点在需要时调用该绑定器并为您执行添加。
但是,由于您传递对象,因此在加法操作结束时(例如,如果操作数是两个 Int32 值),您将不得不将生成的 Int32 装箱到一个对象,因为(仍在活页夹中)调用什么网站预计。我有点担心这种不断的装箱/拆箱可能会在一定程度上影响运行时的性能。
这真的是它应该如何工作(所有装箱/拆箱)还是我错过了什么?
c# - C# 编译器 + 带有装箱的通用代码 + 约束
让我们检查为以下通用方法生成的 MSIL 代码:
看:
但是对于上面的通用代码,更有效的 IL 表示应该是:
从约束中可知,该值被装箱到引用类型中。Unbox.any
opcode 是完全多余的,因为在box
opcode 之后,IL 堆栈中的值已经是对 的有效引用!!U
,无需任何拆箱即可使用。
为什么 C# 3.0 编译器不使用约束元数据来生成更高效的通用代码?Unbox.any 的开销很小(只是慢了 4 到 5 倍),但为什么不在这种情况下发出更好的代码呢?
java - 当类已知时创建(装箱)原始实例
我需要一个返回所提供类类型实例的方法。让我们假设提供的类型仅限于可以创建它们的“空”实例。例如,提供String.class
将返回一个空字符串,提供一个Integer.class
将返回一个初始值为零的整数,等等。但是我如何动态创建(盒装)原始类型?像这样?
是遍历所有可能的原始类型的唯一解决方案,还是有更直接的解决方案?请注意,两者
和
抛出一个InstantiationException
(因为它们没有空构造函数)。
c# - 将条件运算符与 IsAjaxRequest 结合使用以返回 ActionResult
Mvc.JsonResult
由于and之间没有隐式转换,因此Mvc.ViewResult
我不能只使用条件运算符,而是以强制转换结束。
这让我想到了我的问题是我会为拳击 JsonResult 带来的性能损失值得还是我应该做一个正常的if...else
块?
下面的代码出现在一个普通的控制器动作中:public ActionResult Inactivate()
没有拳击
VS拳击
c# - 如何防止拆箱 - 读取任意 sql 行时装箱内存开销
我正在编写一个类来表示 SQL 查询中的一行。我希望通过类的 indexer 属性访问字段数据。如果我将数据加载到内部对象列表中,这很简单。我已经尝试过这个并且对原始人的拳击不满意。拳击增加了 20% 的内存需求。我想将原语存储为类中的原语。DataTable 类通过为从 IDataReader 返回的架构中的每一列创建数组来存储基元。我以这种方式实现了一个类,但我更喜欢将数据与行对象一起存储,而不是存储在行内部引用的列中。
有什么想法可以做到这一点吗?
c# - 可变数量的参数而不装箱值类型?
上述签名的问题在于,将传递给该方法的每个值类型都将被隐式装箱,这对我来说是严重的性能问题。
有没有办法在不装箱值类型的情况下清除接受可变数量参数的方法?
谢谢。
java - 内部编译器错误 ArrayIndexOutOfBoundsException: -1 ... generateUnboxingConversion
尝试编译时遇到了一些奇怪的异常:
这是一个有效的检查(拆箱-隐式强制转换-拆箱)吗?
c# - 装箱和拆箱:什么时候出现?
所以我明白什么是装箱和拆箱。它什么时候出现在现实世界的代码中,或者在什么例子中它是一个问题?我无法想象做这样的例子:
...但这几乎可以肯定是过于简单化了,我什至可能在以前不知道的情况下完成了装箱/拆箱。
c# - 为什么结构需要装箱?
在 C# 中,任何用户定义struct
都会自动成为 System.Struct 的子类, System.ValueType
而System.Struct System.ValueType
是System.Object
.
但是当我们将一些结构分配给对象类型引用时,它会被装箱。例如:
所以我的问题是:如果A
是 的后代System.Object
,编译器不能将其向上转换为对象类型而不是装箱吗?
java - Java 自动拆箱 - 是否有编译器警告?
我是 Java 自动装箱的忠实粉丝,因为它节省了很多丑陋的样板代码。但是,我发现在 Number 对象可能为空的某些情况下,自动拆箱会让人感到困惑。有什么方法可以检测代码库中发生自动拆箱的位置并带有 javac 警告?任何其他仅检测拆箱事件的解决方案(例如 FindBugs 或 Eclipse 特定的编译器警告)将不胜感激,因为我找不到任何解决方案。
为了澄清,我不希望在装箱时产生任何警告 - 只拆箱。
下面是一些可能导致混淆 NullPointerExceptions 的代码的简单示例: