摘要:
1、Web Server 与 DB Server 分离
小型网站或 B/S 项目,因同时在线人数不多,尚可让同一台物理主机,既做 Web Server,又做 DB Server。但此二者皆会占用大量的 CPU、内存、磁盘 I/O,最好让二者分别用不同的服务器主机来提供服务,以分散压力、提高负载承受能力。此外,二者若在同一网段,应尽量用内网 Private IP 进行访问,而不要用 Public IP 或主机名称。
基本上跑 Web 上的应用程序,不管用什么软、硬件,同时处理多个用户的 request,通常都比较消耗 CPU;但对数据库而言,CPU 就不见得会大量消耗,而是内存和磁盘 I/O 用 阅读全文
随笔分类 - [01].NET技术
艾伟_转载:排行榜数据库设计与分析——为什么实时排行不可行?
2011-08-29 00:21 by 狼人:-), 226 阅读, 收藏,
摘要:
很多网游中都有排行榜,这里就专门讨论一下这个排行榜背后的数据库设计。一开始我觉得这是一个基本的数据库设计问题。只需要有一个实体,没有实体间的关系,没有复杂的逻辑。网络上也搜索不到太多关于这类设计的问题,好像根本不值得为其写个文章。但是在公司专门做了一个月的排行榜数据库设计。才发现问题根本没有看上去那么简单。甚至一篇文章都难以讲明白。不知自己误入歧途了,还是这个问题的确就是很复杂的。所以写个文章讲给大家,或许能有人一语道破。
一开始听到要设计一个排行榜,觉得很简单,一个外键加一个分数列,排名不保存在数据库中,每次查询都实时计算。不就得了?
接下来,就来讨论一下这种方案的可行性。先来描述一下经过最 阅读全文
艾伟_转载:使用配置文件(.settings、.config)存储应用程序配置
2011-08-29 00:21 by 狼人:-), 144 阅读, 收藏,
摘要:
引言
我不知大家早先是如何保存应用程序配置,以备下次打开时使用的,反正我开始学.Net的时候就去研究序列化,以二进制或XML格式的序列化来保存应用程序配置。这样每次都要建立单独的配置类,并书写读写配置代码,相当麻烦。
期间也看了看.config文件的读写方式,感觉还是很麻烦,不如自己序列化来的踏实。
后来才猛然发现微软早提供好了settings,用以定义.config文件内容,并生成相应的强类型类,使用起来极其方便~,感觉就像在火星居住了半辈子突然发现还有地球这好地方*_*~
鉴于网上settings方面的资料不多、不详,我就以此文来介绍一下基本的用法,让小鸟们少走我那条破路,老鸟请直接从上. 阅读全文
艾伟_转载:从ASP.NET的PHP执行速度比较谈起
2011-08-29 00:21 by 狼人:-), 149 阅读, 收藏,
摘要:
上星期我在InfoQ发表了一篇新闻,对Joe Stagner在博客上发表的三篇关于ASP.NET与PHP性能对比的文章进行了总结。写新闻其实挺不爽的,因为不能夹杂个人的看法,只能平铺直叙陈述事实。当然,如果像某些新闻那样“换一种说法”是可以骗过一些“不明真相的群众”,但是这就有违道德了。因此,在客观陈述完新闻内容之后,我只能选择把自己的感想、评论等内容放在自己的博客上。 Joe Stagner的背景挺特殊,它是PHP的老用户,在ASP.NET出现之前就是PHP的重量级开发人员了。后来不知哪一天开始他加入了微软,我们就可以在一些如介绍ASP.NET AJAX的文章、视频中看到他。这次他又... 阅读全文
艾伟_转载:面向对象封装了啥
2011-08-29 00:21 by 狼人:-), 150 阅读, 收藏,
摘要:
面向对象封装了变化,或者更加准确的说,应该是封装了不变的地方,留出了变化的地方可以在需要的时候再去变,那么什么地方会变化呢?
1、数据的变化 比如一个工厂生产一种纸盒子,程序要计算它的体积,需要有长、宽、高的尺寸,盒子的尺寸是固定的,那么在代码里面直接硬编码,比如长1,宽2,高3,方法返回1*2*3,甚至直接返回6,没有任何问题。现在需求发生了变化,这个工厂生产两种尺寸的盒子,另一种长2宽2高2,这时候变化的就是数据。使用变量来抵御数据的变化。我现在只要在计算体积的方法里设长宽高三个参数,在方法里返回长*宽*高就可以了。这里不变的是计算体积的过程、长宽高的变量,变化的是计算用到的数据。... 阅读全文
艾伟_转载:把事件当作对象进行传递
2011-08-29 00:21 by 狼人:-), 140 阅读, 收藏,
摘要:
最近在琢磨一些事情,和API设计有关。API设计在很多时候是和语言特性有关的,因此如Java这样的语言,在API设计时会处处受到压抑。而C#就能够出现如Moq或Fluent NHIbernate这样的项目。同样,F#能够开发出FsTest,Scala号称Scalable Language,都是依靠着丰富的语言特性。不过,最近在使用C#的时候鼻子上也碰了一点灰,这是因为我发现“事件”这个东西没法作为对象进行传递。
public class Program
{ public event EventHandler Submit;
} 我们如果要为这个事件添加处理函数自然只要:
va... 阅读全文
艾伟_转载:LINQ to SQL、NHibernate比较(二)-- LINQ to SQL实例
2011-08-29 00:21 by 狼人:-), 176 阅读, 收藏,
摘要:
用ADO.NET操作数据库大家一定再熟悉不过了,select、insert、update等等SQL语句大家也都必然滚瓜烂熟。我将自己在学习LINQ to SQL过程中的动手经历记录下来,作为今后学习的参考,也希望对刚刚接触的人有一点帮助。 我在本文涉及到一个很简单的系统,利用DataGridView实现数据库数据的批量增、删、改,不是什么强大的功能。 如果有人感兴趣,可以在看完我的这篇文章之后用ADO.NET实现同样的功能,看看到底会比使用LINQ to SQL多多少时间,会多多少代码。(从设计到完成我用时大概2小时,代码量后面介绍中我会贴出我的代码)我相信很多人编码能力比我强很... 阅读全文
艾伟_转载:把委托说透(4):委托与设计模式
2011-08-29 00:21 by 狼人:-), 170 阅读, 收藏,
摘要:
委托与很多设计模式都有着千丝万缕的联系,在前面的随笔中已经介绍了委托与策略模式的联系,本节主要来讨论委托与其他两个模式:观察者模式和模板方法模式。
委托与观察者模式
在.NET中,很多设计模式得到了广泛应用,如foreach关键字实现了迭代器模式。同样的,.NET中也内置了观察者模式的实现方式,这种方式就是委托。
观察者模式的一般实现
网上可以找到很多资料介绍观察者模式的实现,我这里介绍一种简单的退化后的观察者模式,即Subject类为具体类,在其之上不再进行抽象。
public class Subject
{ private List<Observer> observers = 阅读全文
艾伟_转载:关于.NET VS JavaEE平台争论的沉思录
2011-08-29 00:21 by 狼人:-), 189 阅读, 收藏,
摘要:
最近关于.NET和java平台之间的争论似乎又热起来了,就我关注的两个社区,先是老赵的《为啥老赵不喜欢Java*语言*》。引发了博客园的大讨论,最近csdn又有人发博.Net与J2EE的快餐型比较,引发了空前的大讨论。从论调来说感觉对java不利。虽然csdn得那个篇博文深度不够,但确实引发了大量了讨论,虽然很多人都说,这个话题没啥好讨论的,既然引发了大讨论,自认有其内在原因在驱动,所谓空穴来风。。。。 关于两个平台的优劣已经讨论的够多了,我在这里就不多说了,我在这里提个现实的问题供大家思考: 国内外用.NET做的大型系统确实java的要比.NET的要多,这是客观的事实,我们研究.NE... 阅读全文
艾伟_转载:ASP.NET MVC数据验证
2011-08-29 00:21 by 狼人:-), 182 阅读, 收藏,
摘要:
关于ASP.NET MVC的验证,用起来很特别,因为MS的封装,使人理解起来很费解。也可能很多人都在Scott Guthrie等人写的一本《ASP.NET MVC 1.0》书中,见过NerdDinner项目中对Dinner对象修改和添加的时的数据验证。但有许多封装的地方,不知道是怎样的工作原理,今天研究了,拿出来给大家分享一下。
数据库还是上一篇blog中的库与表,同样的方法来创建news表的实体类,在自动生成的news这个实体类中,我们发现有一个特殊的分部方法:
partial void OnValidate(System.Data.Linq.ChangeAction action);
这个 阅读全文
艾伟_转载:使用Ajax和jQuery实现GridView的展开、合并
2011-08-29 00:21 by 狼人:-), 138 阅读, 收藏,
摘要:
需求简介:电子商务网站中,查询会员的订单,点击“會員”,展现此会员的订单列表。
界面操作: Step 1 展现会员列表,如下图 Step 2 点击“某一会员”行 展现会员订单列表 实现思路: 1、 使用用户控件(CustomerOrders.ascx)展示订单列表,此用户控件只需要包含Repeater控件并绑定数据源
2、 新建一个简单页面GridViewDrillDownjQueryQAjax.aspx,在此页面引用用户控件,展示用户订单列表
3、 在页面GridViewDrillDownjQueryQAjax.aspx新建两个DIV:一个用来展示会员信息,一个用来展示某个... 阅读全文
艾伟_转载:C#下实现空白窗体上中文输入,可以实现类PS的文字工具
2011-08-29 00:21 by 狼人:-), 286 阅读, 收藏,
摘要:
C#下实现空白窗体上中文输入
关键字:类PS的文字工具,中文输入.重复截取中文
最近在研究做一个类PS的文字工具,查了N多的资料,问了N多个人,总算功夫不负有人心.终于给弄出来了.写出来给大家一起讨论.(高手们请多多指点)
在空白窗体上打开输入法,在C#里的空白窗口是无论如何也是打不开输入法.设置了this.ImeMode=ImeMode.NoControl也是无法打开输入法的录字窗口.去Microsoft开发论坛上问了一些问题.感谢周雪峰版主与Riquel_Dong版主给的指点.用了API函数:ImmAssociateContext(IntPtrhWnd,IntPtrhIMC);终于把输.. 阅读全文
艾伟_转载:把委托说透(3):委托与事件
2011-08-29 00:21 by 狼人:-), 170 阅读, 收藏,
摘要:
在把委托说透(1)和(2)中,先后介绍了委托的语法和本质,本文重点介绍.NET中与委托息息相关的概念——事件。在此之前,首先需要补充(2)中遗漏的一部分内容,即C#在语法上对委托链的支持。
C#编译器为委托类型提供了+=和-=两个操作符的重载,分别对应Delegate.Combine和Delegate.Remove方法,使用这两个操作符可以大大简化委托链的构造和移除。
好了,有了+=和-=,我们就可以开始今天的话题了。
什么是事件?
事件(event)是类型中的一种成员,定义了事件成员的类型允许类型(或者类型的实例)在某些特定事情发生的时候通知其他对象。如Button类型的Click事件,在按 阅读全文
艾伟_转载:.NET内存管理、垃圾回收
2011-08-29 00:21 by 狼人:-), 142 阅读, 收藏,
摘要:
1.
Stack和Heap 每个线程对应一个stack,线程创建的时候CLR为其创建这个stack,stack主要作用是记录函数的执行情况。值类型变量(函数的参数、局部变量
等非成员变量)都分配在stack中,引用类型的对象分配在heap中,在stack中保存heap对象的引用指针。GC只负责heap对象的释
放,heap内存空间管理 Heap内存分配 除去pinned object等影响,heap中的内存分配很简单,一个指针记录heap中分配的起始地址,根据对象大小连续的分配内存 Stack结构 每个函数调用时,逻辑上在thread stack中会产生一个帧(stack fr... 阅读全文
艾伟_转载:ASP.NET MVC分页的实现
2011-08-29 00:21 by 狼人:-), 229 阅读, 收藏,
摘要:
在ASP.NET中,GridView控件本身就带有分页的功能,只要把当前页面的索引值赋给GridView的PageIndex就可以实现了分页,至于数据怎么分页,全都由GridView封装起来了。
在ASP.NET MVC中分页的实现就只能靠自己来设计了。首先来说一下分页的原理。现在有一个张news表,中间有很多信息,我们假设一页显示5条记录,这样,页面数量=总记录数/5;这里,如果出现小数,得进位取整。如比总记录和数为51,那么分的页面数量是11,最后一页只有一条记录。好,有这样一个思路后,现在就来做ASP.NET MVC中的分页了。
1、 数据库和表
创建一个Data_Company的数据库 阅读全文
艾伟_转载:把委托说透(1):开始委托之旅 委托与接口
2011-08-29 00:21 by 狼人:-), 138 阅读, 收藏,
摘要:
委托,本是一个非常基础的.NET概念,但前一阵子在园子里却引起轩然大波。先是Michael Tao的随笔让人们将委托的写法与茴香豆联系到了一起,接着老赵又用一系列文章分析委托写法的演变,并告诫“嘲笑孔乙己的朋友们,你们在一味鄙视“茴”的四种写法的同时,说不定也失去了一个了解中国传统文化的机会呢!”。
在我个人看来,委托是.NET Framework中一个非常炫的特性,绝不会向有些评论里说的那样,根本没有机会接触。恰恰相反,我们几乎每天都会接触委托,使用委托。
其实园子里已经有了很多关于委托的文章,比较有代表性的有:
1. C# 中的委托和事件及其续
2. C#委托,事件理解入门 (译稿)
3. 阅读全文
艾伟_转载:把委托说透(2):深入理解委托
2011-08-29 00:21 by 狼人:-), 218 阅读, 收藏,
摘要:
在上一篇随笔中我们通过示例逐步引入了委托,并比较了委托和接口。本文将重点剖析委托的实质。
委托在本质上仍然是一个类,我们用delegate关键字声明的所有委托都继承自System.MulticastDelegate。后者又是继承自System.Delegate类,System.Delegate类则继承自System.Object。委托既然是一个类,那么它就可以被定义在任何地方,即可以定义在类的内部,也可以定义在类的外部。
正如很多资料上所说的,委托是一种类型安全的函数回调机制, 它不仅能够调用实例方法,也能调用静态方法,并且具备按顺序执行多个方法的能力。
委托揭秘
在把委托说透(1)中可以看到 阅读全文
艾伟_转载:深入研究 Repeater
2011-08-29 00:21 by 狼人:-), 160 阅读, 收藏,
摘要:
在所有这三个数据 Web 控件中,Repeater Web 控件在呈现的 HTML 里提供了最大的灵活性。 DataGrid 或 DataList 会在预设的 HTML 标记中自动包含开发人员指定的内容。与它们不同的是,Repeater 在呈现的时候将严格生成指定的 HTML 标记。 因此,如果不想用 HTML的table或者一系列span,标记显示数据,而希望以其他方式显示数据,就必须使用Repeater 控件。
就像 DataList 一样,使用 Repeater 时要用模板指定标记。 Repeater 包含下列五个模板: Code highlighting produced by Ac. 阅读全文
艾伟_转载:使用.NET框架自带的Json序列化类
2011-08-29 00:21 by 狼人:-), 190 阅读, 收藏,
摘要:
主要用到的类:DataContractJsonSerializer,该类被申明在System.Runtime.Serialization.Json命名空间下,而System.Runtime.Serialization.Json命名空间是被放置在System.ServiceModel.Web.dll程序集里,因此我们要用到DataContractJsonSerializer类,首先应添加对System.ServiceModel.Web的引用,然后添加System.Runtime.Serialization.Json命名空间,注意DataContractJsonSerializer序列化的方式是采 阅读全文
艾伟_转载:c#扩展方法奇思妙用变态篇四:string 的翻身革命
2011-08-29 00:21 by 狼人:-), 174 阅读, 收藏,
摘要:
string是各种编程语言中最基础的数据类型,长期以来受尽其它类的压迫,经常被肢解(Substring、Split)、蹂躏(Join)...
而现在string要“翻身闹革命”了,它几乎无所不能,可以为所欲为,令其它类心惊胆颤... 让我们来看一下革命后的string做了些什么?
1. 打开文件或网址 Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/ -->1"c:\\t.txt".Open();2"http://w 阅读全文
浙公网安备 33010602011771号