小编jag*_*ags的帖子

是否急切地编译静态方法(JIT'ed)?

根据我的理解,CLR编译器对实例方法和静态方法都采用相同的方法,只要第一次调用该方法,IL代码就是JITted.今天我和我的同事进行了讨论,他告诉我静态方法的处理方式与实例方法不同.即,只要程序集加载到应用程序域中,静态方法就会被JIT,而实例方法在第一次被调用时就会被JIT.

我真的很困惑,并没有看到为什么静态方法应该由CLR急切编译的原因?我理解关键终结器对象的静态构造函数或终结器方法,或者使用约束执行区域时.但是如果某个类有静态方法和实例方法的组合,我真的不确定为什么一旦包含该类的程序集被加载到内存中,所有静态方法都会被JIT实现?

请帮助我理解这种行为.

.net clr jit memory-management

10
推荐指数
1
解决办法
507
查看次数

命令设计模式 - Invoker是否可选?

在命令设计模式中,Invoker类是可选的吗?客户端需要为命令实例化Concrete Command和Receiver.客户端是否总是需要实例化Invoker并将命令对象传递给Invoker对象.稍后当客户端需要执行命令时,客户端只询问Invoker对象并且Invoker执行命令(可能立即或可能将命令排队等待以后执行).

或者这是另一种方式?如果客户端需要同步执行命令,客户端将使用基类接口引用该命令,但将实例化具体的命令和接收器.每当客户端需要执行命令时,客户端只会在基类命令变量上调用execute方法?当一个命令应该执行时需要一些额外的逻辑时,Invoker类将用于保留额外的逻辑,客户端将与Invoker对象进行交互以执行命令?

design-patterns command-pattern

10
推荐指数
1
解决办法
2421
查看次数

AppDomains和GC堆

是否有单个GC堆过程以这样的方式进行分区,即每个应用程序域都可以访问特定分区?或者每个应用程序域都有单独的GC堆?我确定其他堆如HF堆,LF堆,存根堆,处理表等等......所有这些堆都是为每个应用域分别分配的?GC堆也会单独分配吗?

这可能是正确的,因为除非对象可序列化或实现为MarshalByRef,否则无法在AppDomains之间传递对象.我在想是否有与每个对象关联的AppDomainID和Object Header(Sync Block)存储有关AppDomainID的信息?

.net appdomain

6
推荐指数
1
解决办法
697
查看次数

实用程序/助手无状态静态类与无状态非静态类

从内存分配的角度来看,创建无状态静态实用程序类与无状态非静态实用程序类之间有什么区别吗?根据我的理解,静态类实际上可能更好,因为不会在 GC 堆上分配任何对象。只会在高频堆上创建方法表,而对于非静态类,将在 GC 堆上创建一个对象以及 HF 堆上的方法表。需要你们的帮助来确认它,如果我遗漏了任何其他考虑因素,请告诉我。

.net c#

5
推荐指数
1
解决办法
2008
查看次数