Dynamic Language Runtime (DLR) 初深

本文主要包括两个内容:DLR在.Net中的位置和一次DLR的调用过程。

1. DLR在. Net 中的位置

图1

DLR 包括哪些内容?

1. Expression Tree(表达式树)。

2. Dynamic Dispatch 。 将调用分发到指定的binder中。

3. Call Site缓存。

每个dynamic 的操作都算是一个call site。比如a ^b,DLR会缓存这两个对象的类型,下一次操作时会直接运行native。

4. IDynamicMetaObjectProvider接口与DynamicObject以及ExpandoObject。

DLR调用过程:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" />

图2

如图所看到的。当dynamic类型的dyna变量调用Call()时。C#编译器先将它编译成Call Site;随后DLR将调用分发到指定的binder生成IL缓存。最后是JIT的工作,生成native代码的缓存。从而使得再次调用时,能够直接调用native code。

时间: 2024-10-31 07:27:45

Dynamic Language Runtime (DLR) 初深的相关文章

Chapter 13 - Dynamic type and DLR

The content and code of this article is referenced from book Pro C#5.0 and the .NET 4.5 Framework by Apress. The intention of the writing is to review the konwledge and gain better understanding of the .net framework.    1. The role of C# dynamic key

Failed to initialize the Common Language Runtime

今天在SQL Server 2008中执行存储过程的时候报以下错误: Msg 6513, Level 16, State 27, Procedure usp_QueryRealTimeRoomInfo, Line 173 Failed to initialize the Common Language Runtime (CLR) v2.0.50727 due to memory pressure. This is probably due to memory pressure in the Me

Dynamic Programming——Runtime Types in Reflection

Reflection provides classes, such as Type and MethodInfo, to represent types, members, parameters, and other code entities. However, when you use reflection you don't work directly with these classes, most of which are abstract . Instead, you work wi

Objective-C Runtime的基本使用(iOS Runtime的初体验)

一.Runtime前言 最近研究Runtime,基础不够好,研究好久了,才了解一些些,知道个大概,这里做一个笔记.OC是运行时语言,只有在程序运行时,才会去确定对象的类型,并调用类的对象相应的方法.利用runtime机制让我们可以在程序运行时动态修改类,对象中的所有属性,方法,就算是私有方法以及私有属性都可以动态的修改.所以我所理解的就是 动态创建类,修改类,访问私有方法等一些基本特性,应该说理解runtime的基本用法吧! 二.Runtime简介 Runtime简称运行时,就是系统在运行的时候

CLR(Common Language Runtime) 公共语言运行库

.NET Core 使用 CoreCLR .NET Framework 使用CLR. 1. 将代码编译为IL (Intermediate Language) 2. CLR 把IL 编译为平台专用的本地代码. IL 运行时, JIT(Just-In-Time) Compiler 编译IL代码, 创建特定于平台的本地代码. 原文地址:https://www.cnblogs.com/TheMiao/p/10030288.html

Java中迭代器初深

今天学习了迭代器,老师对迭代器的两个方法hasNext()和Next(),做了深入的理解,并且举了一个简单的例子大致模拟了底层的实现,下面我来记录下实现的过程,首先建立了一个 Collection.java 这是模拟的Collection接口 代码如下: package cn.itcast.studyIterator; public interface Collection {    public Object get(int index);    public int size();    p

初深线程

Java多线程编程 一.操作系统中线程和进程的概念 现在的操作系统是多任务操作系统.多线程是实现多任务的一种方式.进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以启动多个线程.比如在Windows系统中,一个运行的exe就是一个进程.线程是指进程中的一个执行流程,一个进程中可以运行多个线程.比如java.exe进程中可以运行很多线程.线程总是属于某个进程,进程中的多个线程共享进程的内存.同时”执行是人的感觉,在线程之间实际上轮换执行. 二.Java中的线程 在

[Dynamic Language] Python定时任务框架

APScheduler是一个Python定时任务框架,使用起来十分方便.提供了基于日期.固定时间间隔以及crontab类型的任务,并且可以持久化任务.并以daemon方式运行应用. 测试计划任务 mac-abeen:timetask abeen$ vim testtask.py 1 # !/usr/bin/env python 2 # -*- encoding:utf-8 -*- 3 4 from datetime import datetime 5 6 7 class TestTask(obj

C# - DynamicObject with Dynamic

本文转载:http://joe-bq-wang.iteye.com/blog/1872756 里面有动态Linq to xml的写法. There is a expando object which allow you add/remove properties at runtime, DynamicObject provides ou with more capability and it is better used in places where a wrapper excels a ra