异步跟多线程并不是一回事,异步就是与硬盘读写有关,性能比多线程稍微高一点、
多线程的调用方法是BeginInvoke();且只能是只有一个委托目标。非多播
异步多线程的三大特性:
1.同步卡界面,主线程比如ui线程被占用,多线程UI线程空闲,只是起到一个通知的作用,具体计算任务交给子线程执行。
2.同步慢,因为只有一个线程干活,异步快是因为多个线程并发计算,这里也会消耗更多资源,不是线程越多越好,(1.资源有限、2.线程调度耗资源、3.不稳定)
3.多线程是无序的,不可预测,启动顺讯不确定,消耗时间不确定,结束顺序不确定。不要试图控制执行的顺序
Thread是前台线程,启动后必须执行完才会退出。 线程启动的要比委托BeginInvock()要快一点。委托多线程:是后台线程,程序进程关了,线程全部强制关闭。
一般都用后台线程
停止线程:靠的不是外部力量,比如线程的注销方法。而是靠自身,外部设置个信号量。内部判断是否true还是false而是否继续执行
委托事件:观察者模式。反射:工厂模式。aop:装饰模式,代理模式,
委托同步Invock():
异步beginInvock():
Async:
Thread:
ThreadPool线程池:控制创建和销毁、控制数量。
Task:方便带返回值、等待、回调。简单
Parallal:Task再次封装,并行计算,优化主线程逻辑,主线程也可以参与计算,能控制数量,缺点就是只能等着。
ThreadCore:
加密算法:
des:对称可逆加密(也就是解密跟加密的密钥是一样的。缺点:密钥是共享的保存一般信息)速度稍快
RSA:非对称加密(一组一堆,两个密钥,一个加密钥,解密钥。优点:保证安全性!)速度稍慢
加密钥、解密钥 钥匙的功能划分
公钥 私钥 公开程度划分
加密钥公开,解密钥揣兜里。特点:保证内容只有我看的到,防止外传。就算传给别人了别人没有解密钥也解不了密
解密钥公开,加密钥揣兜里。特点:保证数据不能篡改,一定来自于我。就算你改了我数据那么,别人拿到解密钥就解不了密了。
AOP面向切面编程与OOP是互补的,更好的去面向对象:利用Attribute特性:可以在不破坏类型封装的前提下,为对象增加额外的信息,执行额外的操作。每个类只要考虑好自身的业务,其他的公共逻辑就放到特性中去处理,比如LoginFilter
AOP利用装饰者模式静态的方式,给需要执行的类方法块前后都切入公共逻辑代码比如验证、日志,异常。方法执行前、后
也可以使用.NET Remoting/RemlProry实现动态代理 代理模式 Proxy UnityAOP
![](/qrcode.jpg)
EF查询的时候尽量用延迟查询。不要着急ToList();延迟查询返回的就是IQueryList,即时查询得到的是IEnumberList。
特别是要分页的一定要做‘延迟查询’,包括排序什么的,不要先Tolist()后再筛选Skip分页!
ToList()一定是要放到最后!!
CodeFirst:以代码为中心,如果代码里有的连接字符串、模型,数据库没有,那么就自动创建数据库和表。
表名利用特性 [Table(“反射数据库表名”)]
属性利用[Column("新字段名")]
IOC:控制反转(原本上端直接指定使用的对象换成由第三方装配。)
IOC是目标,实现方式有两种:1.依赖查找,2.依赖注入
DI:依赖注入 是实现控制反转的一种手段! 都是利用特性,又分三种都是接口(1.属性注入[Dependency],2.构造函数注入[InjectionConstructor],默认找参数最多的构造函数!3.方法注入[InjectionMethond])
容器单例,线程单例(可用在定时调度里),
DIP:依赖倒置原则(上层模块不应该依赖于下层模块,二者应该通过抽象来依赖。比如UI层不应该直接声明创建其他层的具体业务细节类对象)