c# - CLR:常量字符串值在内存中的生命周期是多长?

标签 c# string memory-management clr constants

假设我们有一个包含 10000 个常量字符串成员的类。

class Schema
{
  //Average string length is 20
  public const string ID1 = "some.constant.value";
  public const string ID2 = "some.other.constant.value";
  //...
}

并非所有字段都在其余代码中引用。它们中只有 10% 在启动时被访问——它们的引用被分配为各种词典的键(数以千计的 Dictionary 实例)。我知道 const 字符串是驻留的 - 多次引用 const 字符串不会增加消耗的内存超过指向驻留字符串表中偏移量的元数据标记的大小。

我知道 const 字符串被编译到程序集中,因此会影响编译程序集的大小。


这些 const 字符串在什么确切时间/事件消耗运行时内存?

所有 const 字符串所需的全部内存是在加载程序集时获取的还是延迟到类被 JIT 编译时?

我们可以通过改变等式中的某些东西来减少启动后的内存消耗吗? (使字段成为非常量,使字符串成为静态字段?)。

让我们假设一个 Winforms 应用程序 (.NET 2.0)。

最佳答案

Const 字符串是编译时文字,并且由于 CLR 对这些字符串使用实习,只要应用程序处于事件状态,它们就会一直存在。

您还可以找到我对 this question 的回答相关。

关于c# - CLR:常量字符串值在内存中的生命周期是多长?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3298770/

相关文章:

您可以在 XP 上调整 C 运行时堆段保留大小吗?

c# - 编写游戏,代码执行是随机的

javascript - 如何在 JavaScript 中将字符串转换为数组?

iphone - 从 Web 输出中提取表格

c - 关于C中的字符串输入

ios - 我可以找到创建命名 OSMallocTag 的库吗?

c# - 检索 Sharepoint 列表 C#

c# - 如何从第二个显示器隐藏 winform 控件?

c# - 为什么 .NET 异步等待文件复制比同步 File.Copy() 调用消耗更多 CPU?

objective-c - 启用僵尸可以阻止我的应用程序崩溃