文章分类 - c#
摘要:1. C#语言方面1.1 垃圾回收 垃圾回收解放了手工管理对象的工作,提高了程序的健壮性,但副作用就是程序代码可能对于对象创建变得随意。 1.1.1 避免不必要的对象创建 由于垃圾回收的代价较高,所以C#程序开发要遵循的一个基本原则就是避免不必要的对象创建。以下列举一些常见的情形。 1.1.1.1 避免循环创建对象 ★ 如果对象并不会随每次循环而改变状态,那么在循环中反复创建对象将带来性能损耗。高效的做法是将对象提到循环外面创建。 1.1.1.2 在需要逻辑分支中创建对象 如果对象只在某些逻辑分支中才被用到,那么应只在该逻辑分支中创建对象。 1.1.1.3 使用常量避免创建对象 程序中不应出现
阅读全文
摘要:前些日子我发了一份ASP.NET面试题 清单. 有一些访客比较保守,觉得我是没事找事,里面都是些很琐碎的问题。剩下的人则说“蛮不错的,我得去看一看其中的一些问题” 我更喜欢后者的回复,我觉得后者才是正确的态度。 当然我并不想把.NET软件开发概括为一些简单的小问题,我只是想让大家多思考。我相信一个真正优秀的ASP.NET(及WinForm)开发人员应该不仅仅会拖放控件到设计...
阅读全文
摘要:大家对密码执行散列和Salt运算一定不陌生。两个Visual Studio企业版示例都是用的这个方法来加密这个方法的。结合示例代码,我总结了一个包含对密码进行加密,比较等静态方法的类。 使用说明:先用HashAndSalt方法对密码进行加密,然后存储到数据库中。 在用户登录时用ComparePasswords方法在对用户输入的密码和用户注册时存储在数据库中的密码进行比较,判断用户输入的密码是否正...
阅读全文
摘要:读完《重构——改善既有代码的设计》和《重构与模式》,有了些许感想,先与大家分享一下。当我们已经对设计模式倒背如流时,却往往发现在实际代码编写中有生搬硬套的感觉。设计模式是前人经验的总结,直接拿来用合不合适呢?这让我想起了大学一位老师告诉我们的一条学习的道路“知识,理论,智慧”。设计模式是很一种优雅的“智慧”,但对于我们初学者来...
阅读全文
摘要:紧耦合 从前,在南方一块奇异的土地上,有个工人名叫彼得,他非常勤奋,对他的老板总是百依百顺。但是他的老板是个吝啬的人,从不信任别人,坚决要求随时知道彼得的工作进度,以防止他偷懒。但是彼得又不想让老板呆在他的办公室里站在背后盯着他,于是就对老板做出承诺:无论何时,只要我的工作取得了一点进展我都会及时让你知道。彼得通过周期性地使用“带类型的引用”(原文为:“type...
阅读全文
摘要:前言:.NET 3.5 + VS 2008已经发布一年多了,可是还有一半以上的企业和开发团队在用VS2005+.Net2.0(包括我们公司),甚至还有用.Net1.1+VS2003的。生产工具是提高生产力的最重要途径,但是还有许多人没意识到08系列的强大。本来写此文来说服公司领导,顺便也发出来,想表达这种观点:不与时俱进就要时不我待啦!网上好像还没有这么一篇较短篇幅的文章能系统说明一下08+3.5...
阅读全文
摘要:SQL Server是中小型网站广泛使用的数据库,由于功能强大也滋生了很多安全问题,国内又因为SQL注入攻击的很长一段时间流行,导致对SQL Server的入侵技巧也层出不穷,由于SQL Server支持多语句,相信很多小黑在对SQL Server进去SQL注入的时候很少使用猜解表名之类的方法,而直接转向使用SQL Server的存储过程和函数快速的拿权限,下面我就围绕SQL Server的系统存...
阅读全文
摘要:代理技术——使代码变得更简洁在面向对象编程中,会用到大量的类,并且会多次调用类中的方法。有时可能需要对这些方法的调用进行一些控制。如在权限管理中,一些用户没有执行某些方法的权限。又如在日志系统中,在某个方法执行完后,将其执行的结果记录在日志中。处理这些需求的一般做法是在调用这些方法的地方加上适当的代码。如以下C#代码如示:public class Class1{public...
阅读全文
摘要:今天拿了移动硬盘考了不少台球教程回家。跟小p看完星际录像后准备学习台球。在explorer中打开对应的文件夹,习惯性地右键鼠标选择缩略图方式预览。正准备双击目标文件打开的时候,咣当!熟悉的框框,explorer居然crash了。好吧,老娘可是好惹的么?!重新启动explorer试了一下,问题每次都能重现。好吧,肯定又是被某个流氓软件强奸了。根据以往的经验,上windbg,问题发生的时候看看call...
阅读全文
摘要:先看问题:http://www.cnblogs.com/wuchang/archive/2006/12/07/584997.html题目很简单吧,用C#执行pow(2)的性能比C++执行pow(2)的性能慢了一个数量级.大家先想想看.我,Support Engineer:从我这个support engineer的层次来说呢,二话不说先祭出reflector,profiler和windbg三大武器了...
阅读全文
摘要:最近一位朋友的ASP.NET程序怀疑有内存泄露问题。几个简单的页面,起来运行几分钟后,虚拟内存就到600多MB。从性能监视上看,private bytes只有200多MB。这样的问题从经验上来说,十有八九都是内存碎片了。ASP.NET程序发生内存碎片的原因比较多,我常见的有:1. Web.config中的debug=true,导致batch compilation=false,使得每一个ASPX页...
阅读全文
摘要:ADPlus V6.0 已经过彻底改写,它具有了新的开关和新的功能。现在,您可以通过外部配置文件来对该工具进行配置。您可以在Microsoft Windows 调试器程序包附带的调试器帮助文件 (Debugger.chm)中查看有关这些新功能和新开关的更新信息。要获取该程序包,请访问下面的 Microsoft 网站:http://www.microsoft.com/whdc/devtools/de...
阅读全文
摘要:在生产环境下进行故障诊断时,为了不终止正在运行的服务或应用程序,有两种方式可以对正在运行的服务或应用程序的进程进行分析和调试。首先一种比较直观简洁的方式就是用WinDbg等调试器直接attach到需要调试的进程,调试完毕之后再detach即可。但是这种方式有个缺点就是执行debugger命令时必须先break这个进程,执行完debug命令之后又得赶紧F5让他继续运行,因为被你break住的时候意味...
阅读全文
摘要:Enterprise Library 4.0版本包含以下应用程序块: Caching Application Block . 开发人员可以使用这个程序块在应用程序中应用缓存. 支持可插拔的缓存提供者(Provider)。 Cryptography Application Block . 开发人员可以把这个应用程序块在应用程序中应用散列和对称加密。 Data Access Applicati...
阅读全文
摘要:NVelocity是java velocity的c#实现,目前我在CodePlex维护着与velocity同步的版本。NVelocity也在项目中使用着,在社区也有国外开发者的一些反馈。 下面是一个在Asp.Net如何使用NVelocity的非常简单例子: 定义HttpHandler: Code Code highlighting produced by Actipro CodeHighli...
阅读全文
摘要:我喜欢在Asp.Net MVC中使用NVelocity View Engine的一个很重要的理由就是:NVleocity简洁易用的语法。几乎使用#set,#if,#foreach就可以构成完整的应用,下面就介绍一下NVelocity中的语法及常用指令。 默认情况下,NVelocity解析是不分大小写的,当然可以通过设置runtime.strict.math=true,采用严格解析模式。 对变量的引...
阅读全文
摘要:1. 什么是内核对象? 内核对象是操作系统分配的一个内存块,该内存块是一个数据结构,用于管理对象的各种信息。 当应用程序要与系统设备进行交互的时候,将使用到内核对象,出于安全的考虑,进程是不能直接访问内核对象的,操作系统提供了对应的函数来对它们进行访问。 存取符号对象、事件对象、文件对象、作业对象、互斥对象、管道对象、等待计时器对象等都是内核对象。我们在编程时经常要创建、打开和操作它...
阅读全文
摘要:DTD"(Documnet Type Definition)是XML1.0版规格得一部分,它是XML文件得验证机制,属于XML文件组成得一部分,DTD在XML文件所扮演得角色就是定义XML文件的元素架构、元素标记和属性!一旦我们定义好DTD,在使用编辑工具如XML Spy 或者验证工具 XML validate (微软网站均可以下载)就可以对编写好的XML文件进行DTD检查内容是否为合法的XML文...
阅读全文
摘要:public object DeepCopy(object obj) { MemoryStream ms = new MemoryStream(); BinaryFormatter bf = new BinaryFormatter(); bf.Serialize(ms, obj); object retval; ms.Seek(0, SeekO...
阅读全文
摘要:一:理解多线程 多线程是这样一种机制,它允许在程序中并发执行多个指令流,每个指令流都称为一个线程,彼此间互相独立。线程又称为轻量级进程,它和进程一样拥有独立的执行控制,由操作系统负责调度。 具体到java内存模型,由于Java被设计为跨平台的语言,在内存管理上,显然也要有一个统一的模型。系统存在一个主内存(Main Memory), Java中所有变量都储存在主存中,对于所有线程都是共享的。每条线...
阅读全文
浙公网安备 33010602011771号