c# - C# 如何知道何时运行静态构造函数?

标签 c# .net static-constructor

我不相信生成的代码会在每次访问静态成员(包括函数)时检查类是否已初始化。我相信检查每次访问都是低效的。我查看了 ECMA 334 中的 §17.11,它说

The execution of a static constructor is triggered by the first of the following events to occur within an application domain:

  • An instance of the class is created.
  • Any of the static members of the class are referenced.

看起来没有定义如何确定“第一次”发生的时间。我想不出任何办法,只能每次检查。如何实现?

最佳答案

当你有问题要解决时,一个好的技巧是:解决一个更难的问题,这样你的小问题的解决方案就可以通过解决更难的问题来解决。

CLR 有一个更难解决的问题:它必须在每个方法首次调用之前恰好运行一次抖动。如果 CLR 可以解决该问题,那么它显然可以解决检测静态 ctor 何时需要运行这一相对微不足道的子问题。

也许您的问题应该是“抖动如何知道何时第一次 jit 一个方法?”

关于c# - C# 如何知道何时运行静态构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9335628/

相关文章:

c# - 使用 LINQ 而不是两个 for 循环

c# - 在 ASP.NET Core 6.0 中使用 Microsoft.Identity.Web 记录身份验证事件

c# - 与 iOS 调用 [[NSLocale currentLocale] localeIdentifier] 等效的 Windows Phone 7 C# 是什么?

c# - 如何运行静态构造函数?

c# - 公共(public)构造函数和静态构造函数

java - 静态类未加载

c# - 在 MahApps.Metro 中使用数据绑定(bind) ItemsControl 时显示 WindowCommands 的分隔符

c# - 从其代码中获取 unicode 字符串 - C#

.net - 如果使用标准库,基于 IronPython .net 的 DLL 是否需要与 Python 标准库一起部署?

c# - GridView,DataSet 中的父子表