- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
最初,我有一段如下代码:
data Something = Something !Word32 !Word32
retrieveSomething :: Socket -> IO (Something)
retrieveSomething sock = do
...
function sock = do
(Something x y) <- retrieveSomething sock
let (a,b,c) = case x of
0 -> (foo,bar,baz)
1 -> (foo2,bar2,baz2)
...
doIOwithParams a b c
我使用 -hy -hC"..."
RTS 选项进行了分析。
查看堆配置文件,我发现使用 3 元组消耗了太多内存,因此我使用了未装箱的元组扩展(即 (# a,b,c#)
),这似乎更适合返回多个值。
我或多或少确信堆使用量已经减少,因为我在尝试未装箱的元组之前通过显式调用 stuff
对其进行了测试,但通过这样做,我现在无法观察成本中心中分配的不同类型的值。
为了进一步澄清这个问题,我可以看到在分析应用程序而没有拆箱元组后,Something(以及其他任何东西)类型的空间值在堆中占用了多少空间。现在,在堆图上只能看到一种类型,我认为它与我在函数调用中进行的可变哈希表调用有关。
有办法解决这个问题吗?
编辑:虽然未装箱的元组不会出现在配置文件上是完全合理的,但我仍然很困惑为什么使用它们会隐藏函数调用/成本中心中的其他所有内容。
我尝试使用显式调用而不是使用未装箱的元组进行分析,如下所示:
case x of
0 -> doIOwithParams foo bar baz
1 -> doIOwithParams foo2 bar2 baz2
除了能够看到 3 元组的开销不再存在之外,函数中使用的某些内容和所有其他类型也是可见的,这与我在未装箱元组中只能看到的情况相反与其他类型相比,节点类型(可能与我正在使用的哈希表相关,也可能无关)几乎不占用任何空间。
最佳答案
I had seen that using the 3-tuples consumed way too much memory, so I used unboxed tuples extension (i.e. (# a,b,c #)) which seemed better suited for returning multiple values.
只需使用具有严格字段的常规数据类型。然后 GHC 可以根据需要将其映射到堆或堆栈上未装箱的元组。
data Something = Something {-# UNPACK #-}!Word32 {-# UNPACK #-}!Word32
这具有未装箱元组的所有优点,并且没有任何缺点。
关于 haskell : Using unboxed tuples lead to weird types during heap profiling,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14087164/
有没有办法使用像这样的变量类型来拆箱/转换 var varType = typeof(int); var variable = 5; return (varType)variable; 最佳答案 您的
显式编码拆箱已包装的原始数值。在Java5及以上的版本,拆箱是不必要的,可以安全地删除。那么 JDK5 到底做了啥? 自动装箱(auto-boxing)与自动拆箱(auto-unboxing) Jav
我尝试用下一种方式比较整数(对于我来说,这很好): public void compareMayNull(Integer a, Integer b) { if ((a == null ? -1
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicates: Why do we need boxing and unboxing in C#? What is box
我有一个数据类型 newtype Zq q = Zq (IntType q) 其中 'q' 将是该类的一个实例 class Foo a where type IntType a 而“IntTyp
根据 Haskell 文档,you can't pass a primitive value to a polymorphic function or store one in a polymorph
我正在学习在 Swift 中解析来自 Android/Java 的 JSON,我正在使用 John Sundell 的 Unbox 来帮助我解决这个问题,这让我想起了 GSON。引用:Unbox po
Data.Vector.Unboxed不是 Foldable 的实例.编写适用于 Foldable 实例的函数的最佳方法是什么?以及未装箱的向量?例如这个版本的 sum适用于列表和装箱向量,但不能使用
我有一个应用程序,它花费大约 80% 的时间使用 Kahan summation algorithm 计算高维向量(dim=100)的大列表(10^7)的质心。 .我已尽力优化求和,但它仍然比等效的
我怀疑这可能是 Rakudo 中的一个错误,但我今天才开始使用 Perl 6,所以很有可能我只是犯了一个错误。在这个简单的程序中,在 sub 中声明一个类型化数组似乎会让 Perl 6 编译器生气。删
我已经编写了一些代码,其中一小部分代码采用一个大的一维 Unboxed.Vector 并将它们作为 Vector (Vector a) 返回。 代码的一部分给出了错误。这是一段与实际代码相似的示例代码
可以导出 Storable通过 GHC 的通用推导机制:http://hackage.haskell.org/package/derive-storable (和 https://hackage.ha
我想在没有的情况下从 double 类型转换为 long BX_BOXING_IMMEDIATELY_UNBOXED_TO_PERFORM_COERCION 错误。 我被困在给出上述错误的声明中。 请
为了说明我的问题,请考虑以下简单示例 (C#): object reference = new StringBuilder(); object box = 42; object unset = nul
我有一个项目 enable在 .csproj 中 我遇到了一些奇怪的警告行为。 我有一个遍历枚举的 foreach 语句,枚举中的 foreach 项运行一些代码。 但是当我尝试执行此操作时,VS20
我有一个数字应用程序,它对概率的负对数做了很多工作,它(因为概率范围从零到一)取正 double 值或负无穷大(如果基础概率为零)。 我将这些与新类型 Score 一起使用如下: newtype Sc
如果我有像 5 * 5.0 这样的代码,结果将转换为最准确的类型,Double。 但这似乎不适用于这样的代码 case class Value[T : Numeric](value: T) {
Data.Text 和 Data.Vector.Unboxed Char 内部工作方式有什么区别吗?为什么我会选择其中之一而不是另一个? 我一直认为 Haskell 将 String 定义为 [Cha
在特定的上下文中,我需要管理约束值。简化;假设我需要将值限制为字符串或 64 位整数。 为了这个目的;我正在考虑声明一种结构类型,其中一个字段用于存储值的类型,一个字段用于实际值。 在这个简化的例子中
无论我登录哪个用户,因为“points”变量总是返回 0。相同的代码适用于不同的 Activity ,我看不出有什么不同。当我将鼠标悬停在 datasnapshot 上时,它表示可能会产生空指针异常,
我是一名优秀的程序员,十分优秀!