.Net Framework认知

在托管代码的世界里,应用程序首先被加载到应用程序域(AppDomain)中,然后将应用程序域加载到进程中,一个进程可以包含多个应用程序域,也就是说一个进程可以包含多个应用程序,毕竟应用程序域之间的切换比进程间的切换要轻便。

在应用程序域之间的数据时相互独立的,当需要在其他AppDomain当中执行当前AppDomain中的程序集代码时,可以使用CrossAppDomainDelegate委托。把CrocessAppDomainDelegate委托绑定方法以后,通过AppDomain的DoCallBack方法即可执行委托。

class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("主程序域开始运行");
            //建立新的应用程序域对象
            AppDomain newAppDomain = AppDomain.CreateDomain("子程序域");
            //绑定CrossAppDomainDelegate的委托方法
            CrossAppDomainDelegate crossAppDomainDelegate = new CrossAppDomainDelegate(MyCallBack);
            //子应用程序域调用委托,相当于子程序域调用主程序域里的方法
            newAppDomain.DoCallBack(crossAppDomainDelegate);
            //绑定程序域卸载事件处理方法
            newAppDomain.DomainUnload += (obj, e) =>
            {
                Console.WriteLine("子程序域卸载!");
            };
            //卸载子程序域
            AppDomain.Unload(newAppDomain);

            Console.ReadKey();
        }

        static public void MyCallBack()
        {
            string name = AppDomain.CurrentDomain.FriendlyName;
            for (int n = 0; n < 4; n++)
            {
                Console.WriteLine(string.Format("当前程序运行于{0}",name));
            }
        }
    }

一个进程可以包含多个线程,线程存在于进程当中,它在不同的时刻可以运行于多个不同的AppDomain当中。它是进程中的基本执行单元 ,在进程入口执行的第一个线程被视为这个进程的主线程。在.Net应用程序中,都是以Main()方法作为入口的,当调用此方法时,系统就会自动创建一个主线程。线程主要是由CPU寄存器、调用栈和线程本地存储器(TLS)组成的。CPU寄存器主要记录当前所执行线程的状态,调用栈主要用于维护线程所调用到的内存与数据,TLS主要用于存放线程的状态信息。

时间: 2024-08-01 14:37:38

.Net Framework认知的相关文章

《你必须掌握的Entity Framework 6.x与Core 2.0》正式出版感想

前言 借书正式出版之际,完整回顾下从写博客到写书整个历程,也算是对自己近三年在技术上的一个总结,整个历程可通过三个万万没想到来概括,请耐心阅读. 写博.写书完整历程回顾 从2013年12月注册博客园账号,注册博客园账号还是在学校兼职时,带我们的经理要我们经常多看看这个平台上的文章学习学习,于是乎就注册了账号,但是一直未启用,直到2015年7月才开始才正式开始写博文,那时的想法和大多数注册博客园账号童鞋的想法一样,记录自己学习和积累的点滴,遇到什么问题就不用到处各种找寻资料,同时写的博文能够得到大

Django REST Framework 数码宝贝 - 3步进化 - 混合类 --&gt;

读了我这篇博客, 你会刷新对面对对象的认知, 之前的面对对象都是LJ~~~ 表结构 class Publisher(models.Model): name = models.CharField(max_length=32) def __str__(self): return self.name class Author(models.Model): name = models.CharField(max_length=32) def __str__(self): return self.name

利用 Django REST framework 编写 RESTful API

利用 Django REST framework 编写 RESTful API Updateat 2015/12/3: 增加 filter 最近在玩 Django,不得不说 rest_framework 真乃一大神器,可以轻易的甚至自动化的搞定很多事情,比如: 自动生成符合 RESTful 规范的 API 支持 OPTION.HEAD.POST.GET.PATCH.PUT.DELETE 根据 Content-Type 来动态的返回数据类型(如 text.json) 生成 browserable

iOS库--.a与.framework

一.什么是库? 库是共享程序代码的方式,一般分为静态库和动态库. 二.静态库与动态库的区别? 静态库:链接时完整地拷贝至可执行文件中,被多次使用就有多份冗余拷贝. 动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存. 三.iOS里静态库形式? .a和.framework 四.iOS里动态库形式? .dylib和.framework 五.framework为什么既是静态库又是动态库? 系统的.framework是动态库,我们自己建立的.fram

认知,构建个人的知识体系(上)

1.前言 本文将聊聊我对构建个人知识体系的一些想法,主要是为了提升自我认知.从个人经历开始,谈谈对知识的划分,也就是一个是什么,为什么的过程. 2.缘起 把时间回到一年前,那时候我工作快一年了,得益于前面的一些努力,工作比较顺利.特别是技术上,没有遇到太多过无法解决的问题.同时也开始迷茫,工作难道就是这个轻松的样子?三五年之后那不是很无趣,该怎么办? 想找到这个问题的答案,而最好的方式莫过于,亲自去了解那些三五年工作经验的人是怎么的样子. 因此从那时候起,关注了不少来公司面试的人的简历,也有过几

Multithreading Batch Processing Framework

1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 # Author: f0rsaken 4 5 import argparse 6 import importlib 7 import sys 8 import threadpool 9 import time 10 11 def main(): 12 parser = argparse.ArgumentParser(description="Multithreading Batch Proce

安装mysql时,提示This application requires .NET framework 4.0问题

Question:双击MySQL的安装文件, 弹框提示, Answer:安装微软的 .NET Framework 4或更新的版本,下载地址:https://www.microsoft.com/zh-cn/Search/result.aspx?q=.net+framework&x=0&y=0 安装完成后安装MySQL即可.

使用自定义的framework

1.创建framework工程,创建需要的类将接口暴露在public中 2.运行后可在window/projects 的Derived Data中找到framwork所在路劲(分别在真机和模拟器下运行,会在product文件中生成不同的文件) 3.使用lipo命令合并库 lipo -create 库1的路径 库2的路劲 -ouput 库名 (图为库) 将生成的库(如果没有设置的话,库生成在根目录上),将其复制到模拟器或者真机的framework中覆盖原有的库. 4.在新工程中导入framewor

Entity Framework的查询

Entity Framework是个好东西,虽然没有Hibernate功能强大,但使用更简便.今天整理一下常见SQL如何用EF来表达,Func形式和Linq形式都会列出来(本人更喜欢Func形式). 1.简单查询: SQL: SELECT * FROM [Clients] WHERE Type=1 AND Deleted=0 ORDER BY ID EF: //Func形式 var clients = ctx.Clients.Where(c => c.Type == 1 && c.D