构建简单的socket连接池
摘要:构建简单的socket连接池前奏:这段时间,公司安排了一个任务:构建一个管理socket连接的连接池。一开始,选用Vector来存放连接。由于这个容器不是并发安全的,于是,每个方法都加一个synchronized来保持并发时的同步操作,并发效率很差,果断放弃。空余时间研究了下多线程的并发知识,决定用并发安全的阻塞队列(LinkedBlockingQueue),这个容器可以自动维护容量的大小,就免去了再起一个线程去维护线程池的大小。为了保证每个连接是可用的,为线程池启动了一个守护线程去定时发送心跳。程序如下,欢迎高手们指点缺陷: 1 public class SocketConnectionP.
阅读全文
.Net用户使用期限的设置、限制通用小组件
摘要:.Net用户使用期限的设置、限制通用小组件最近比较项目组的同事都比较烦,不断的穿梭在不同的项目之间,一个人同时要兼顾多个项目的维护修改。甚至刚放下这个客户的电话,另一个客户的电话就进来了。究其原因,相比很多人都深受其苦,“收尾款”``````` 看着商务部,不断发过来的项目维护文档,同时伴随着客户不断的承诺,这批维护好就结尾款。。。。我们为之奋斗了一天又一天```` 终于,商务部的老大火了,为了每个客户剩余的那些尾款,投入的精力,都足赶上承接一个新的客户的项目开发精力啦。商务老大丢出很霸气的一句话,给所有在收尾款以及以后开发的新项目都加一个使用期限限制,到时不给钱就给他停了~~~ 于是乎,我就
阅读全文
自定义工作流 之 模型设计与实现
摘要:自定义工作流 之 模型设计与实现背景在上篇文章(Workflow:自定义工作流 之 模型选择)介绍了模型的选择,这篇文章就介绍一下模型的设计与实现。有些朋友会希望在这里看到:数据库、持久化或审批人角色处理等代码,我是领域驱动设计(DDD)的爱好者,因此很长一段时间内您是看不到这些代码的,我觉得这些不是模型的核心。模型设计概念模型模型规则如下1、系统有活动(方块或圆形)和路由(线条)组成,每种类型的活动支持不同的路由规则。2、方块代表人工活动,人工活动只能路由到一个目标节点,可以定义多个路由,但是只有一个路由会执行,这让模型支持:顺序和判定。顺序执行判定执行3、圆形代表并行活动,Split(分流
阅读全文
分享自制的C#和VB Code互转工具
摘要:分享自制的C#和VB Code互转工具作为.NET程序员,往往习惯使用一种语言(据我观察,2006年后的程序员习惯用C#,之前的喜欢VB)。而对于另一种语言虽然能读懂但是写起来总是比较费事。尤其面对旧的项目升级或者才考其他网上的开源资源的时候,总会很麻烦。于是诞生了很多VB和C#互转的工具,例如Developerfusion的CsharpToVB工具。不过那是在线版本的,可能受到网络条件限制,反应很慢或者干脆由于禁网无法访问。综上,我准备自己写一个C#和VB的互转工具,方便大家使用。工具简介该工具主要针对文件夹,进行批量转换。它能把SourceDirectory文件夹以及所有子文件夹下的C#和
阅读全文
c#做动态(gif)中文验证码
摘要:c#做动态(gif)中文验证码无意中在国外论坛发现一个gif动画类,我使用它来制作了一个动态验证码 ;一:首先新建一个类库 1:新建AnimatedGifEncoder类 View Code12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310..
阅读全文
HTTP协议 HttpWebRequest和 Socket的一点总结
摘要:HTTP协议 HttpWebRequest和 Socket的一点总结相信接触过网络开发的人对HTTP、HttpWebRequest、Socket这些东西都不陌生吧。它们之间的一些介绍和关系我这里都忽略了。开我们平时开发过程中也是很少有机会接触大什么大并发这个东东,一般大并发我们都需要考虑异步和多线程以及对象池,这个我们以一个简单demo来讲解吧。主要的调用关系图如下:类的结构图如下:一:这里我们依次对这些类做一个简单的说明HttpRequestInfo:public string Url:http请求的url字符串,如http://www.baidu.com/public byte[] Pos
阅读全文
C#中Hashtable容器的了解与使用
摘要:C#中Hashtable容器的了解与使用初涉Hashtable寄语由于近段时间培训内容涉及到Hashtable方面的知识,由于培训仅仅起到一个引导的作用,加之以前又接触得少,因此对Hashtable这个东东蛮陌生,呵呵,今晚木有事儿就一起来学习一下吧,更欢迎大神进来批评指正什么是Hashtable我们从字面意思就可以猜到Hashtable就是哈希表,它是通过类实现一个哈希表,里面存着一个个的键值对,哈希表可以将键映射到相应的值。Hashtable是一个容器,我们可以使用key来快速查找相应的值。并且在Hashtable中key和value均为object类型,也就是说Hashtable可以支持
阅读全文
关于ref与out的区别
摘要:关于ref与out的区别写在最前面这几天一直在公司接受培训,都是一些基础的知识,同时也乘着这个机会巩固一下自己的基础,基础太重要了。前些时一直看的是多线程方面的知识,接下来我会写一些其他方面的知识,毕竟作为一个实习新人得和自己从事的具体方向靠近,不过感觉前些时的多线程学的还不够,今后有空还会继续,暂时到此吧、、、昨天培训的时候有一个问题是关于ref和out的区别,悲催的我不知道,只晓得它们可以做引用传递,具体区别都没一个概念额,貌似当年教我们C#初级的尹老师提到过一个数字交换实现可以用这个,不过当时也就仅此仅此,今天来学习下下首先声明下哈,此文参考了网上部分文章内容,然后结合自己的了解和总结,
阅读全文
C#中指针使用总结
摘要:C#中指针使用总结int*[] arr整形一维数组指针五、指针的使用1.整形指针的使用int i=10;int* iptr = &i; //将i的地址赋值给iptrConsole.WriteLine((int)&iptr); //取iptr得地址Console.WriteLine(*iptr); //取iptr指向的值2.结构体指针struct Location{ public int X; public int Y;}unsafe static void Main(string[] args){ Location location; location....
阅读全文
一个打包文件导入器
摘要:一个打包文件导入器不光是敲代码,最近连打包也做了,各种各样的打包要解释:给仪器打包,吃饭时帮同事打包饭菜,给生成好的程序打包。由于这里是博客园,仪器打包和饭菜打包不能说太多,不然有移出首页的危险。之前写了两篇关于安装包制作的博文了,这回继续写与安装包相关的。尽管现在有不少的打包工具,但是还用着VS来打包。 来说说背景,有这么个程序,他的完整代码我手上没有,每次打包都要搭档生成一份给我,这样就没法在项目输出那里把需要的文件(包括exe)塞进去,只能手动去添加,但是面对着多个文件夹,我只能用老黄牛的办法把它们都加进去。一般情况下,我只会把最新的文件替换过去就算了,不过如果添加了新文件,少添加了打包
阅读全文
C#如何通过SOCKET的方式获取HTTPONLY COOKIE
摘要:C#如何通过SOCKET的方式获取HTTPONLY COOKIE正常情况下C#可以使用HttpWebRequest、HttpWebResponse和CookieContainer类来获取Cookie,但是当Cookie设置为httponly,我们就不能用上面的方法获取。这时候可以用Socket来模拟http提交。具体如下:1.先取得默认DNS服务器地址:?IPEndPoint endPoint;IPAddress IpList;IpList = Dns.GetHostAddresses("www.7fenx.com")[0]; 2.模拟http请求,设置http头:?Str
阅读全文
C#如何加载程序运行目录外的程序集
摘要:C#如何加载程序运行目录外的程序集我们的应用程序部署的时候,目录结构一般不会只有运行程序的目录这一个,我们可能在运行目录下建子目录,也可能使用System32目录,也可能使用其它第三方的程序集。.Net程序集首先会在GAC中搜索相应的版本,如果未找到则会应用程序配置文件中找(如果配置),最后到应用程序所在的路径搜索。 如何可以将程序集部署的运行目录的子目录, 在app.config添加以下配置,其中probing的privatePath就是配置当前程序搜索的子目录 ... ... 当然我们也可以更详细的配置,不过似乎一般这么用的很少,这里可以指定程序集名...
阅读全文
Entity Framework:如果允许模型处于非法状态,在某些场景下,记得清空DbContext
摘要:Entity Framework:如果允许模型处于非法状态,在某些场景下,记得清空DbContext背景之前写过两篇文章介绍模型的合法性:DDD:关于模型的合法性,Entity.IsValid()合理吗?.NET:关于数据模型、领域模型和视图模型的一些思考今天讨论的问题其实是关于“主键映射”的,只是其中还涉及一种决策:“允许模型处于非常状态”。测试代码 1 public static void Do() 2 { 3 Database.SetInitializer(new DropCreateDatabaseAlways()); 4 5 ...
阅读全文
序列化
摘要:序列化序列化序列化是将对象状态转换为可保持或传输的格式的过程。与序列化相对的是反序列化,它将流转换为对象。这两个过程结合起来,可以轻松地存储和传输数据。几种序列化技术: 1)二进制序列化保持类型保真度,这对于在应用程序的不同调用之间保留对象的状态很有用。例如,通过将对象序列化到剪贴板,可在不同的应用程序之间共享对象。您可以将对象序列化到流、磁盘、内存和网络等等。远程处理使用序列化“通过值”在计算机或应用程序域之间传递对象。 2)XML 序列化仅序列化公共属性和字段,且不保持类型保真度。当您要提供或使用数据而不限制使用该数据的应用程序时,这一点是很有用的。由于 XML 是一个开放式标准,...
阅读全文
为什么不能在子类或外部发布C#事件
摘要:为什么不能在子类或外部发布C#事件背景一个朋友问了一个问题:“为什么不能在子类或外部发布C#事件?”,我说我不知道,要看看生产的IL代码,下面我们看看。测试代码 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace EventStudy 8 { 9 class Program10 {11 static void Main(string[]...
阅读全文
Async和Await异步编程的原理
摘要:Async和Await异步编程的原理1. 简介从4.0版本开始.NET引入并行编程库,用户能够通过这个库快捷的开发并行计算和并行任务处理的程序。在4.5版本中.NET又引入了Async和Await两个新的关键字,在语言层面对并行编程给予进一步的支持,使得用户能以一种简洁直观的方式实现并行编程。因为在很多文档里针对Async和Await这两个关键字的使用都被称为异步编程,为了更符合大众的阅读习惯,我们使用异步编程这个叫法,意思上和并行编程完全一样。关于Async和Await异步编程的功能说明和使用介绍,MSDN上有详细文档,链接如下:http://msdn.microsoft.com/en-us
阅读全文
C#代码搜索器
摘要:WEBUS2.0 In Action - [源代码] - C#代码搜索器最近由于工作的需要, 要分析大量C#代码, 在数万个cs文件中搜索特定关键词. 这是一项非常耗时的工作, 用Notepad++要运行接近半个小时. 于是我利用WEBUS2.0 SDK创建了一个代码搜索器程序, 非常方便的完成了这项工作.Code Search程序首先会在选定的目录中搜索所有cs文件: private void btnOpen_Click(object sender, EventArgs e) { try { if ...
阅读全文
线程池
摘要:线程池必须得说点什么今天在介绍线程池之前,我得来说说上上篇随笔。关于线程的优先级,我们知道在C#中可以设置线程的优先级,使重要的作业可以优先执行,但是这个优先级不是一成不变的,也就是说就算你设置一个线程的优先级非常高,但是也有可能在优先级较低的线程后执行。优先级高不代表就得到了绝对的通行证,给一个例子大家看看: 1 class Program 2 { 3 static void Main(string[] args) 4 { 5 Thread test1 = new Thread(new ThreadStart(myThr...
阅读全文
锁
摘要:锁写在前面在进入锁的学习前来看看Thread的方法,之前一直对这个方法不了解,今天学习了下。在学习之前看两段代码吧: 1 static void Main(string[] args) 2 { 3 Thread thread = new Thread(new ThreadStart(myThread1)); 4 thread.Start(); 5 thread.Join(); //关键这一行 6 Console.WriteLine("主线程"); 7 Console.Rea...
阅读全文
抽象类总结及练习
摘要:抽象类总结及练习该篇文章只是说明抽象类的一个使用场景,由于小弟水平一般,如果有说的不对地方希望各位大牛们指出,也欢迎各位亲们补充。什么是抽象类用关键字abstract定义的类即为抽象类,且只能作为基类。抽象类注意的地方1、 用abstract定义的类不一定包含抽象方法,也可以包含非抽象方法。2、abstract定义的方法一定包含在抽象类中。3、抽象类不能被实例,只能被继承并且派生类需要重写(overriding)抽象类中的抽象方法。4、抽象类不能定义为密封类(sealed)5、 如果派生类没有实现所有的抽象方法,则该派生类也必须声明为抽象类。实例下面我通过一个简单的例子说明一下抽象类的使用场景
阅读全文