System.Diagnostics.Trace.实现对程序的跟踪
摘要:我们写完一个程序以后,如果在客户那里出现了问题,由于环境不同找起来很麻烦,比较好的一个方法就是在程序里面写上日志,这样如果出问题的话,直接查看日志就可以了。写日志当然有很多开源的东东,也可以自己来写。但是一是实现起来比较麻烦,二是需要一段时间来学习,三是可能会有潜在的问题。尤其是涉及到多线程的时候,潜在的问题就更多。其实.net已经提供了现成的类,使用起来非常方便。它就是System.Diagnostics.Trace. 这个类提供了很多方便的方法,比如Write, WriteLine等等。这个类还支持输出目标的设置,可以使用系统内置提供的Listener,也可以自己写Listener.我写了
阅读全文
DbHelper通用数据库访问帮助类
摘要:之前我一直都是在博客园中查看各位高手的博文,确实学到了不少知识,不过比较少写博客,现在就把我自己在项目实施过程中使用到比较好的技术框架写出来,希望能让更多的人了解和学习。通常我们在开发使用数据库访问帮助类时,都单独的针对某一种数据进行编写相应的数据访问帮助类,如SQLHelper,OracleHelper,OleDbHelper等,其实这些都帮助类的实现都是继承并实现ADO.NET中的数据库访问基类的,如SQLCommand->DbCommand,SQLConnection->DbConnection等,在未优化数据访问层之前,通常的框架结构如下所示:我们现在可以将SQLServe
阅读全文
线程同步之lock学习
摘要:在应用程序中使用多个线程的一个好处是每个线程都可以异步执行。然而,线程的异步特性意味着必须协调对资源(如文件句柄、网络连接和内存)的访问。否则,两个或更多的线程可能在同一时间访问相同的资源,而每个线程都不知道其他线程的操作。结果将产生不可预知的数据损坏。这个时候我们就需要lock上场了。Lock的作用Lock获取给定对象的互斥锁,保证相应的代码块运行时,不会被其他线程中断;直到该对象被释放时其他线程才能访问相应的代码块;Lock实现本质通过System.Threading.Monitor的enter和exit方法实现的代码实例如下View Code1publicvoidPrintByInner
阅读全文
理解并发编程中的几种并发方式
摘要:理解并发编程中的几种并发方式时刻谨记并发设计当你设计代码利用多核优势的时候,重要的是不要老是想着C#程序代码是独自执行的。C#为并发代码做了设计,也就是很多代码可以在同一个进程里同时执行或者交错执行。相同的类方法可以在并行代码里执行。如果这个方法在静态变量里保存了状态,以后再使用这个状态,这样的并行执行会产生非期望的和不可预料的结果。就像前边解释的,多核微处理器上的并行编程使用的是共享内存模型。如果没有考虑并发,那些在相同的共享内存里的数据可能会导致不可预料的结果。使每个类和方法可以没有副作用的并行执行是一个好的实践。如果你考虑不能讲某些类、方法、组件不能设计成并发的,在设计并行代码前需要对设
阅读全文
C# 鼠标悬停在datagridview的某单元格,显示悬浮框效果
摘要:最近项目中需要增加一个新的功能,即当鼠标停在Datagridview的某一单元格时,如果该单元格的内容是需要显示说明的,就显示一个悬浮框对其中的数据进行解析说明,在网上查了下,主要有两种方法:方法一,使用一个label控件,通过设置label的visible属性来进行显示和隐藏;方法二,使用datagridview的ToolTipText属性。以下是我用于测试的代码: 1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using Sy
阅读全文
C#学习之动态化--dynamic
摘要:前段时间,一直分析关于dynamic这块的case,但是对于dynamic和DLR却只有一些很模糊的概念,最近好好研究了一下这一块,有点一知半解,嘿嘿。什么是动态,什么又是动态语言运行时动态即为在编译的时候不执行类型检查,仅在运行时识别对象的类型。这样的话,如果调用了一个类型没有的方法或是属性,在编译的时候并不会报错,但在运行时才会捕获这些错误信息。编程语言可分为静态化语言和动态话语言,C#最初是设计为纯静态化语言,但为了改进与动态语言和框架之间的互操作性,最终决定利用dynamic关键字来支持这一功能。 public static void M(dynamic arg) { ...
阅读全文
玩C#
摘要:我们玩技术,不是被技术玩。Coding是快乐的,而非苦逼的。.Net/C#这个神器竟然天天有人吐槽。看不下去鸟。在top10语言中,C#是最优美的语言,没有之一。在top10语言中,C#所可用的标准库及可获得其它库是最强大的之一,这个必须带之一,因为有java在。在top10语言中,C#语言是性能最高的语言之一(开unsafe指针后可以和C一较高下,结果100%是C#败,不过性能差距并不大,C#非托管程序性能约为C程序的四分之三),在top10语言中,C#是内存管理机制最完善的语言(即可用GC,又可不用GC,虽然C++也能做到,但是要靠第三方库,且使用起来不直观不方便)。此外,C#的类库极其强
阅读全文
并发编程中的重重量级模型和轻量级模型
摘要:并发编程中的重重量级模型和轻量级模型使用轻量级并发开发不管是Amdahl定律还是Gustafson的定律都没有考虑引入并发需要付出的额外开销。同时也没有考虑那些可以将顺序代码转变成可以利用并行优势的算法的设计模式。重要的是减少程序中必须执行的顺序代码,改善对并行执行单元的利用。以前的.NET版本,如果你想在一个进程内并行执行C#应用程序,你必须创建和管理多线程(软件线程)。所以,你必须编写复杂的多线程代码。分解算法到多个线程上,协调不同的代码单元,在它们之间共享信息,并且收集执行结果确确实实是一件复杂的编程工作。随着逻辑核心的增多,情况变得甚至更糟了,因为你需要更多的线程来获取更好的可伸缩性。
阅读全文
线程漫谈——线程基础
摘要:本系列意在记录Windwos线程的相关知识点,包括线程基础、线程调度、线程同步、TLS、线程池等。进程与线程理解线程是至关重要的,每个进程至少有一个线程,进程是线程的容器,线程才是真正的执行体,线程必然在某个进程的上下文中运行。进程拥有惰性,如果进程中所有的线程都已结束,那么进程也就没有存在的必要了。一个进程由如下两部分组成:1、一个进程地址空间;2、一个进程内核对象一个线程由如下两部分组成:1、一个线程栈;2、一个线程内核对象线程的开销要比进程少很多,所以在解决编程问题的时候尽量考虑在当前进程中创建线程而不是创建新的进程。然而,线程的切换需要消耗一定数量的CPU资源,因此,也不是说可以毫无顾
阅读全文
PowerShell强大管道
摘要:PowerShell是在Window是的外壳语言,提供了多Windows的更多操作,让我们于windows的操作更简单方便,以及就是就是管理员的命令行更好的管理。PowerShell提供了与.net FCL(.net类库)的操作性,我们可以利用强大的.net FCL在PowerShell中。PowerShell提供强大的管道模型,管道指的是一个命令的输出可以利用操作符(|)方便的传递到下个命令作为输入。PowerShell不同传统管道模型的是它是一门基于对象的管道流,即在命令之间传递的对象不是简单的文本。下面我们就以本地文件操作来实践PowerShell的管道常见命令: 1:集合遍历ForEa
阅读全文
一个比较通用简单易用的配置功能
摘要:以前写过两篇关于如何分离web.config的文章(如何分割web.config, 如何分离web.config改进版本,),至于为什么要分离,我当时的观点如下: 因为有些项目过大,造成N多配置节存在于web.config中,缺点如下: 1:不容易管理,当你想查找一个配置节时,望着整页的code,不知所措,为此你只有ctrl+f来解决。 2:部署时也及容易出错,部署人员需要按照你写的部署文档,一个一个加,即费时又容易出错,比如一不小心将其它节点给覆盖了诸如此类。 3:在web.config中的配置节的修改会引起站点重启。 4:访问配置节不够简单,容易出错。 朋友春天在哪里看了文章后,提到:..
阅读全文
C# menu动态生成
摘要:在权限管理中动态生成菜单的步骤:1.获取角色对应的菜单集合2.遍历父菜单生成窗体父菜单3.遍历子菜单生成窗体对应的子菜单说明:在生成子菜单的时候要给对应的子菜单绑定事件,事件可以提前定义好,然后直接绑定。部分代码: //根据登录用户Id获取角色集合 var roleMenus = RoleMenusBll.GetByRPid((int)Users.URid); if(roleMenus.Count==0) { MessageHelp.PromptMessage("登录用户没有设置任何权限,请联系管理员!"); Close(); } var parentMeuns = rol
阅读全文
整形变量是否可以进行位运算(像枚举类型一样)
摘要:如果您看到这个题目,觉得有点怪,那说明你是一个高人,最起码比我高的多,呵呵。前几天做了一个公用后台管理系统的项目,其中有一个地方涉及到权限管理的,即为每一个按钮赋一个权限,然后它权限汇总到角色表里,即一种角色有一些操作权限,表结构如下:我们看到OperatorAuthority就是操作权限的意思,它是个int类型的,一个role有一个OperatorAuthority,那我们应该怎么把多个权限存储到OperatorAuthority字段里呢?这时,我想到了枚举类型的位运算,所以我把权限枚举设计成了这样: 1 [Flags] 2 public enum UserOperatorRol...
阅读全文
表达式树是否可以有个集合,条件过滤有了新方向
摘要:对于我之前项目中的统一条件过滤采用了dictinary来实现的,优点就是方法签名统一了,缺点不用说,就是字典的键容易写错,感觉一进入.net3.5之后,一切都要和Expression联系在一起,我们在创建一个Expression(表达式树)时,可以使用lambda表达式去创建,很容易:1 Expression<Func<string, bool>> predicate= name=>name=="zzl";可以看到,它其它由一个委托组成,输入参数是个字符,输出是个布尔值,在LINQ中这种技术被广泛的使用在扩展方法中,如Where扩展方法: 1
阅读全文
orchard之lucene.net索引生成
摘要:orchard是微软自己团队搞的cms,园子里有很多园友已经对系统结构详细分析了,但是对里面的某些模块没有一一分析,因为需要使用lucene.net做站内搜索,所以参考学习一下,ps一下lucene.net已经是2.9.4版本了,虽然还在孵化器,但是还是更新了,不容易啊。点开Modules开启lucene相关应用,如下图。先自己在后台发几篇文章,其实在发文章的同时,orchard的消息监听机制就已经自动从消息队列中取出消息然后自动生成索引了。这里分析一下索引过程。点开Settings里的Search Index菜单现在索引里已经包含4条文档了,点击Update的时候会重新生成索引,流程如下。在
阅读全文
编写全面的单元测试
摘要:Kevin_编写全面的单元测试编写全面的单元测试乔纳森·艾伦 发表于2012 5 24 版块:开发主题:.net, 单元测试,编程,测试驱动开发,测试 在那些声称熟悉单元测试“最佳实践”的人们中有一种常见的观点:在一个测试中你应该只写1个断言,最多2个。那些宣称这个理论的人几乎很少展示他们的单元测试并且那些单元测试确实只有一个断言。显然,如果你采纳了他们的建议,一个不重要的小方法也会需要一打儿的断言来保证质量。本文意在通过实例证明每个测试多个断言不仅是必须的而且是有益的。让我们来考虑下一个非常典型的在数据绑定场景中很常见的Person对象:测试FirstName属性我们想要测试的..
阅读全文
C#图片处理基本应用(裁剪,缩放,清晰度,水印)
摘要:C#图片处理基本应用(裁剪,缩放,清晰度,水印)吴剑 2011-02-20转载请注明出处:http://wu-jian.cnblogs.com/前言需求源自项目中的一些应用,比如相册功能,通常用户上传相片后我们都会针对该相片再生成一张缩略图,用于其它页面上的列表显示。随便看一下,大部分网站基本都是将原图等比缩放来生成缩略图。但完美主义者会发现一些问题,比如显示排版时想让相片缩略图列表非常统一、整齐、和美观,比如要求每张缩略图大小固定为120 x 90且不拉伸变形怎么办?再比如用户头像如何让缩略图比原图更清晰?或是如何在上传的图片下加一个半透明的LOGO水印?OK,本文根据自己的项目代码描述以上
阅读全文
BizTalk开发小工具-批量更新发送端口订阅配置参数
摘要:最近公司的主要的数据交换都基于BizTalk完成,现在BizTalk已经成为不可缺少的数据交换核心。利用的就是BizTalk的发布/订阅模式。因此在每个发送端口都要配置消息的属性过滤。每个配置必须手工一个一个的加,非常的繁琐,有时真的把人都搞傻了。后来发现可以直接修改数据就可以实现。因此花了半小时搞了一个BizTalk发送端口属性过滤的配置工具。可以省去不少重复的工作。其功能就是读取BizTalk发送端口的Filters配置参数。其实就是XML,这样就可以直接批量修改,最后在更新回数据库。这样BizTalk的发送端口就可以直接使用了。不知道是否也有人需要这样的功能BizTalkSettingT
阅读全文
自动完成菜单
摘要:「佳作赏析」自动完成菜单(Pavel Torgashov著,野比译)自动完成菜单[乌克兰]Pavel Torgashov著,野比译自定义用于RichTextBox、TextBox和其他控件的自动完成菜单。codeproject.com「2012四月最佳C#文章」获奖作品击阅读原文下载源代码 - 192.4KB下载DEMO - 22.9KB 简介我们所有人都用过VisualStudio的自动完成菜单,也就是IntelliSense。它非常管用,不是吗?不幸的是,.NET框架并没有包含内置的自动完成菜单组件。本文制作的组件将填补这个空缺。AutocompleteMenu允许你轻松地在你的窗体上任何
阅读全文
C#与.NET Framework, ASP.NET Web API RC版本新特性:Web API的帮助文档制作
摘要:在学习中,总是以功能实现为目的,不善于总结,不求甚解,这导致我盲点愈积愈多,知识面得不到很好的扩展。因此,当看到一些新的技术很难以理解,也由于错误的观点将其置之于门外。现在,我要准备行动了! 好了,废话不多说,下面就开始迈出我的第一步吧! 反正据我所知,许多人在学了很长一段时间之后,居然还分不清C#与.NET,下面就针对这个问题,说一下我的理解。 .NET:一般指.NET Framework框架,是一种平台,一种技术。 C#:一种编程语言,可以开发基于.NET平台的应用。 那么我们学习.NET可以做什么呢?大致有以下几种: 1、桌面应用程序 2、Internet应用程序 3、手机开发 .NET
阅读全文