.net深入研究
本专栏主要研究.net领域一些非常的知识
水田如雅
不生产代码,只是代码的搬运工
展开
-
Xamarin For Everyone
今天早上收到邮件: 感觉微软土豪买买买之后,下手速度还是很快的,不想多说,我喜欢这个新玩具,不过科学原创 2016-04-05 11:26:49 · 1778 阅读 · 5 评论 -
Start Xamarin——与Microsoft 的sales development manager的闲谈
因为之前在Xamarin属于微软之前,就已经有Xamarin的账号,试用过破解版的,所以4月1号微软set Xamarin free之后,就收到了Xamarin的邀请试用邮件。 第二天的时候,收到邮件: 之后简短的回复了一下: 主要还是描述了下自身情况。 之后她的回复: Xamarin的官网文档我1号的时候就已经看过,觉得虽然详尽,但是有点儿乱。原创 2016-04-09 14:22:50 · 3591 阅读 · 1 评论 -
Memcached在.net中的应用
一,MemCached下载服务端下载:http://memcachedproviders.codeplex.com/客户端下载:http://sourceforge.net/p/memcacheddotnet/code/HEAD/tarball?path=/trunk 二,服务端的安装及配置1) 解压缩文件到c:\memcached(也可以选择任意位置)2) 命令行输入 'c原创 2015-07-02 23:36:08 · 2934 阅读 · 19 评论 -
.Net配置文件——统一节点配置管理
对于.Net中的自定义节点,如果要单独处理,就要为这个节点添加一个指定的类,如果我们在一个应用程序中,定义了很多个自定义节点的话,还按照这样做,就会多出很多个处理类来,为了避免太多的类,我们将所有自定节点都指定一个自定义节点作为入口,然后只写一个处理类,以此为入口,读取其他节点。 例如,配置文件只定义一个入口节点: 20原创 2015-07-01 19:52:27 · 2223 阅读 · 14 评论 -
.Net配置文件——反射+配置文件存储类型实例
配置文件+反射确实去除了选择语句的繁琐,带来了优美的赶脚! 首先改进了一下类(接上文): namespace ClassLib{ /// /// Interface IGreetingStrategy /// /// Editor:v-liuhch CreateTime:2015/6/28 11:01:58 pub原创 2015-06-30 23:04:03 · 1802 阅读 · 7 评论 -
.Net 配置文件——继承ConfigurationSection实现自定义处理类处理自定义配置节点
除了使用继承IConfigurationSectionHandler的方法定义处理自定义节点的类,还可以通过继承ConfigurationSection类实现同样效果。 首先说下.Net配置文件中一个潜规则: 在配置节点时,对于想要进行存储的参数数据,可以采用两种方式:一种是存储到节点的属性中,另一种是存储在节点的文本中。 因为一个节点可以有很多原创 2015-06-28 00:33:19 · 4388 阅读 · 13 评论 -
.Net——实现IConfigurationSectionHandler接口定义处理程序处理自定义节点
除了使用.net里面提供的内置处理程序来处理我们的自定义节点外,我们还可以通过多种方法,来自己定义处理类处理我们的自定义节点,本文主要介绍通过实现IConfigurationSectionHandler接口的方式来实现自定义处理程序。 首先,我们先在配置文件里面写如下自定义节点: 13232@qq.com lhc原创 2015-06-23 21:40:27 · 2223 阅读 · 7 评论 -
.Net——使用.net内置处理程序处理自定义节点Demo
在.net中,因为对不同的节点,都对应着类去对它进行处理,。net里面为了方便,已经内置了一些类供我们使用,使我们在读取配置文件时,不必自己去定义类去处理自己定义的自定义节点。 下面我们写了这样一个配置文件: --> 节点名称为:mailServe原创 2015-06-22 21:53:37 · 1648 阅读 · 6 评论 -
.net——序列化与反序列化中对日期时间的处理
承接上篇,现在我在类中加入一个日期时间类型的字段:public class Student { public string StudentId { get; set; } public string Name { get; set; } public int age { get; set; } public string Addre原创 2015-06-22 12:04:53 · 2323 阅读 · 7 评论 -
.Net——使用DataContractJsonSerializer进行序列化及反序列化基本操作
在平常中,我们经常会用到将一个T类型的东西,序列化成Json然后返回绑定数据到页面这样一个过程。每次面试,大概都被问到怎么序列化的呀?回答总是底层封装好的,算啦,还是做个简单栗子玩玩儿吧,也好堵住面试官的嘴。 进行序列化和反序列化的时候,主要用到对象DataContractJsonSerializer,然后再配合MemoryStream,就ok啦。 不多说,先来一版简单原创 2015-06-21 22:21:28 · 6484 阅读 · 7 评论 -
.net 流——流的类型体系简单介绍
流的类型体系 基础流 装饰器流 包装器类 帮助类 继承自基本的stream流 在基础Stream上添加的功能 数据传输 对文件流的操作变简单 基础流 Stream 对应的后备存储是文件 内存 网络资源 FileStream MemoryStream NetWorkStream IsolatedStorgaeFi原创 2015-06-21 20:24:42 · 2129 阅读 · 6 评论 -
.net 流——使用流进行文件复制
流的主要用途就是与应用程序外部的文件或数据源进行数据交互。基类为Stream,定义在命名空间System.IO下原创 2015-06-21 17:12:34 · 2197 阅读 · 7 评论 -
.net缓存——基于文件的缓存
一,.Net中的缓存基础知识.net中支持的两种依赖: CacheDependencySqlDependency表示对于文件或者目录的依赖表示对于SQL数据库的依赖 过期时间绝对过期时间滑动过期时间一个特定原创 2015-05-26 20:59:47 · 2162 阅读 · 16 评论 -
.Net网络编程——服务端获取客户端连接
一,客户端服务端连接图示 其中,在客户端和服务端的socket中,都报存这连接的信息;客户端通过connect连接,服务端可以调用AcceptTcpClient来获取链接到服务端的客户端,每一个客户端和服务端的连接都对应这唯一一个Socket.二,服务端获取连接示例using S原创 2015-05-20 22:20:09 · 2067 阅读 · 15 评论 -
.Net网络编程——使用TcpClient与TcpListener建立客户端与服务端连接
一,.NET中如何实现建立连接 在网络中,我们可以通过IP地址唯一定位一台主机,而在主机中,我们要确定收到的数据包发给谁,可以通过端口号,端口号的作用简单说就是不至于使你要发给QQ好友的消息数据包被错误发到了你的OC程序上。 通常,我们把发起连接的那一端称为客户端,这是主动的一方;而静默等待连接到来的那一端作为原创 2015-05-20 21:45:55 · 2563 阅读 · 13 评论 -
.Net——Func<>与Action<>
首先来先写几个测试函数: public delegate void SayHello(string strName); public static void Hello(string strName) { Console.WriteLine(strName + " ,原创 2015-05-17 21:09:15 · 2719 阅读 · 14 评论 -
.Net加密与解密——非对称加密之数字签名
一,从非对称加密的认证模式说起由消息的发送方发布公钥,持有私钥。 步骤:1,发送方公布自己的公钥,任何人都可以获得。2,发送方使用自己的私钥对消息进行加密,然后发送。3,接收方使用发送方的公钥对消息进行解密。 缺点:1,任何截获该消息的第三方都能够使用发送方公钥进行解密;2,耗时,不适用于大数据 二,数字签名原创 2015-05-17 19:15:42 · 2334 阅读 · 12 评论 -
.Net加密与解密——非对称加密之加密模式
一,非对称加密 非对称加密具有一组密钥对,一个是对外公开的,任何人都可以获取,称为公钥; 一个是自行保管并严格保密的,称为私钥。 规则如下: 由某人A的公钥加密消息,只能由A的私钥进行解密; 由A的私钥加密的消息,只能由A的公钥解密。 发送方,接收方都持有公钥/私钥对,因此一原创 2015-05-17 17:23:02 · 2393 阅读 · 9 评论 -
.Net加密与解密——对称加密
一,思路 对称加密含有一个被称为密钥的东西,在消息发送前使用密钥对消息进行加密,得到密文并发送,接收方收到密文后,使用相同的密钥进行解密,获得原消息。 PS:使用密钥对消息进行加密的过程,由加密算法来完成的,加密算法通常也是公开的。二,对称加密的流程 1,发送方和接收方持有相同的密钥,并严格保密2,发送方使用密钥对原创 2015-05-17 16:56:33 · 2415 阅读 · 6 评论 -
.Net加密与解密——散列运算
一,散列运算的特点 1,散列运算是不可逆的,可以将散列运算理解为单向的加密:根据原消息经过散列运算就可以得到摘要(密文);但是根据摘要,无法推导出原消息。2,任何两个不相同的文件,哪怕只有一个字节的细微差别,得到的摘要都是完全不同的。这个特点的意义在于,可以用来判断消息是否被篡改,即解决完整性的问题。3,无论原始消息的大小如何,运算得出的摘要的信息是固定长度,原创 2015-05-15 21:52:47 · 1899 阅读 · 11 评论 -
.Net——缓存机制(一):利用Dictionary模拟缓存
在计算机的硬件设计中,有一个被反复使用的思想——缓存。同样,在软件设计中,这个思想也可以用来解决数据读取非常耗时带来的性能问题(当然,在时间和空间上,我们要寻找一个平衡点)。 首先来看理想的缓存应该是怎么描述的: static Func Cache(Func func) { var mem = new Dict原创 2015-05-14 22:18:19 · 3838 阅读 · 8 评论 -
消息队列(一)——消息的简单发送与接收
背景 开发者经常遇到需要异步执行操作的情况(即过程不等到操作完成就开始)。消息队列提供一个中心位置或池,您可以在其中放置或从中提取数据,从而满足了这一要求。一个应用程序能够把消息存放在队列中,然后继续自己的业务,另一个应用程序在运行时再提取这些数据。 简单理解 感觉这里的消息队列还原创 2015-05-11 21:02:39 · 4727 阅读 · 5 评论 -
.Net——动态调用方法
一,使用InvokeMember思路:在类型的type的对象上调用InvokeMember方法,传递要在其上调用方法的对象,并指定BindingFlags为InvokeMethod.根据方法签名,可能还需要传递参数。示例(对普通方法和对静态方法的调用): #region 动态调用方法——使用InvokeMember对一般方法的调用 //Type t =原创 2015-04-25 19:09:19 · 2330 阅读 · 11 评论 -
.Net——动态创建对象
刚开始看到这个标题的时候其实我也是很难接受的,duang~因为实在想不出什么时候我要去这样子创建对象,干嘛不new一个呢?但根据学习设计模式的经验来说,有时候,不去new对象才是最灵活的做法。首先,写个小类拿着玩儿: public class Calculator { private int x; private int y; public原创 2015-04-25 18:16:37 · 2542 阅读 · 6 评论 -
.Net——自定义特性(Custom Attributes)的创建与查看
有时候,我们会看到这样的东西放在类或者方法上面: [Obsolete("请更新方法")] 刚开始的时候,还自己给它起了个名字——小标签,比如,平常会说:你数据契约是不是没打标签啊!~嘿嘿~ 后来跟代码发现了更多的不认识的自定义标签。那么,这些标签是怎么定义和使用的呢?原创 2015-04-25 17:09:21 · 3902 阅读 · 5 评论 -
.net中对象占用资源的回收
一,使用Finalizer析构器 1,使用了Finalizer析构器的对象如何被回收? 在类中定义了析构器的对象将会被移动到一个专门的队列中,这个队列将作为它的应用程序根,而使队列中的对象存活的更久一点,在对象上面调用完析构函数后,对象才会从队列中清理掉。原创 2015-04-12 21:47:48 · 1627 阅读 · 3 评论 -
反射程序集
通过Type,我们可以对任何类型进行反射读取,同样,也可以把读取的对象的范围扩大。 一,关于程序集 在.net中,程序集是进行部署,版本控制的基本单元; System.reflection命名空间下的Assembly类型,代表了一个程序集,并包含了关于程序集的信息。 获取ass原创 2015-03-15 20:45:19 · 1397 阅读 · 6 评论 -
Type获取类型基本信息示例
本文承接上文:http://blog.csdn.net/lhc1105/article/details/44279675 ,当我们获取到对象实例之后,可以利用Type类提供的一些方法,获取类型的基本信息和成员信息: #region 获取类型的基本信息 People people = new People() //Pe原创 2015-03-15 20:10:37 · 1549 阅读 · 4 评论 -
获取Type对象实例的三种常用方式
平常在封装一些底层方法的时候,使用反射+泛型+委托,可以起到一个普遍适用的作用。今天要总结的是反射中一个非常重要的类——Tyep,平常我们用这个类的时候,都是通过它获取一个类型的属性,方法。。。然后进行各种操作。 下面是如何获取一个Type对象实例的一般方法: 首先,为了做个demo,我们先来写个简单的类: //人原创 2015-03-15 19:35:51 · 3191 阅读 · 1 评论 -
优化AJAX提交到Handler的ProcessRequest方法
背景: 上周搬到新组开发一个微信端的项目,发现这里前台页面部分都是ajax提交到handler,然后handler的ProcessRequest方法接收提交过来的参数,通过参数中的type选择要执行的方法(这里就是访问数据库的操作和一些业务逻辑的调用,分页等等),处理完成之后返回json串到ajax的success方法,然后显示。原创 2015-02-08 14:05:43 · 3848 阅读 · 3 评论 -
多线程——Task
背景: 以前想用Semaphore来处理并发访问资源的问题,后来把方案拿给前辈们看的时候,他们说这样也行,但是最好用Task处理,比较简单。所以,顺便学习了下Task.使用task类创建并执行简单任务等待任务的完成并获取返回值使用Co原创 2015-01-25 13:35:34 · 2291 阅读 · 10 评论 -
ThreadPool执行异步操作
使用ThreadPool_类执行异步任务/* ThreadPool 类是一个静态类型类,使用ThreadPool 类执行异步时通常调用ThreadPool 的 QueueUserWorkItem 方法,这个方法有一个重载版本,如下:public static bool QueueUserWorkItem(WaitCallback callBack); public原创 2015-01-25 13:20:08 · 3381 阅读 · 7 评论 -
使用Monitor对资源进行保护(二)
使用Lock语句 首先来看一下出现的问题: 接着我们用Lock来解决这个问题:创建线程安全类型 上面的类型Resource不是类型安全的,它的内部并没有采取线程安全(Thread-safe)的措施。 前面的线程同步时由类型的客户端program来实施的,之所以可行,完全是因为p原创 2015-01-20 19:30:08 · 1698 阅读 · 4 评论 -
使用Monitor对资源进行保护(一)
首先,来看下使用system.threading.monitor对资源进行保护的思路: 即,使用排它锁,当线程A需要访问某一资源时,对其进行加锁,线程A获取到锁以后,任何其他线程如果再次对资源进行访问,则将其放到等待队列中,知道线程A释放锁之后,再将线程从队列中取出。 主要的两个方法:EnterExit获取锁原创 2015-01-20 19:10:39 · 1684 阅读 · 5 评论 -
WaitHandle——使用AutoResetEvent
区别ManualResetEvent: 使用AutoResetEvent和使用ManualResetEvent是完全相同的,只有一点区别:在使用autoresetevent时,在调用waitOne后,会自动执行到一个reset方法。 AutoResetEvent的waitone相当于将ManualResetEvent.waitone和reset合并为一个方法执行。原创 2015-01-21 22:00:37 · 1744 阅读 · 5 评论 -
WaitHandle——使用Semaphore
semaphore也继承自waithandle,它用于锁机制,与Mutex不同的是,它允许指定数量的线程同时访问资源,在线程超过数量以后,则进行排队等待,直到之前的线程退出。 Semaphore很适合应用于web服务器这样的高并发场景,可以限制对资源访问的线程数。 Monitor与monitor都有一个锁持有者,而semaphore则不需要,因此通常将sempaho原创 2015-01-21 21:12:18 · 1931 阅读 · 4 评论 -
WaitHandle——使用ManualResetEvent
信号量机制 使用ManualResetEvent和AutoResetEvent都继承自EventWaitHandle(继承自waitHandle)。EventWaitHandle对象有两个状态:收到信号(signaled)和未收到信号(nonsignaled);EventWaitHandle中的set和reset方法分别用于将eventwaitHandle对象的状态设为收到信原创 2015-01-21 20:10:35 · 2137 阅读 · 4 评论 -
WaitHandle——使用Mutex
替代object加锁方式 使用System.object对象作为线程同步的工具,建立了一个基本的锁机制,确保资源只能同时被一个线程所访问。 但是这个对象不作任何其他用途,知识用于锁机制。 如果有一个类型可以专注于为线程同步的锁机制和信号量机制提供服务,那么上面的代码就可以简化。 .net中提供了更强大的system.threading.wa原创 2015-01-20 21:12:03 · 2329 阅读 · 6 评论 -
死锁的产生与检测
产生死锁 在操作系统中,我们可能接触过两个进程争抢资源,互不相让,然后产生了死锁,这时候,我们可以用银行家算法来分配资源。下面,我们先模拟产生死锁: #region 试图产生死锁的代码 // static void T1(Program p) //{ // //主线程占有了mainRes原创 2015-01-20 19:37:05 · 1528 阅读 · 6 评论 -
线程的基本操作(二)
前台线程和后台线程 默认情况下,新建的线程为前台线程(foreground thread),可以通过thread类的实例属性IsBackground来查看。将IsBackground设置为true时,则将线程设置为了后台线程。(Background thread). 前台线程和后天线程区别:所有前台线程执行完毕之后,应用程序进程结束,而不论后台线程是否结束原创 2015-01-20 18:56:04 · 1543 阅读 · 5 评论