【发布时间】:2012-02-17 13:05:20
【问题描述】:
我正在创建一个将由演示程序使用的服务。我正在将我的类型定义为类或结构。 .Net 是否为每个 dll 和 exe 创建 1 个堆栈(用于存储值类型)或每个程序创建 1 个堆栈。我非常确定它会为每个程序创建一个托管堆,但不确定堆栈。请帮帮我。
谢谢, 奥姆卡
【问题讨论】:
-
这有关系吗?这是一个实现细节。您假设您知道引用类型和值类型将在哪里结束。请参阅 Eric Lippert 在 The Stack is An Implementation Detail 上的博客文章。
-
是的,这很重要,如果我需要将结构从一个程序集的一个函数传递到另一个,它将复制所有不利于性能的值...
-
您是否有一些特定的性能问题已被 Oded 认定为与此实现细节相关的应用程序瓶颈?
-
在针对这种情况进行优化之前,请确保您确实遇到了问题。您是否衡量了性能并发现这是问题所在?
-
如果复制局部变量的成本太高,很可能它们一开始就不应该是结构。在性能关键代码中也有一些例外,例如 XNA,但通常只有非常小的类型才应该是值类型。
标签: c# java .net memory-management