|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
当然了,现在国内CRM厂商的产品与其说是CRM,但从至少从我的角度分析上来看,充其量只是一个大型的进销存而已了,了解尚浅,不够胆详评,这里只提技术问题web|程序|技能|功能|技能|功能本文会商:
罕见的ASP.NET功能神话
有效的ASP.NET功能技能和窍门
在ASP.NET中处置数据库的一些倡议
缓冲和用ASP.NET举行背景处置
本文利用以下手艺:ASP.NET,.NET框架,IIS
用ASP.NET编写Web使用程序其轻松水平使人难以相信。它是云云的简单,以致于很多开辟职员不必消费几工夫来修建其使用便能取得十分好的功能。在本文中,我将给出10个编写高功能Web使用的技能。我的批评不单单范围与ASP.NET使用,由于它们只是Web使用的一个子集。本文也不是Web使用功能调剂的威望指南――这方面的内容能够写成一本书。相反,本文能够被视作一个好的出发点。
在夜以继日地事情之前,我经常要往攀岩。在攀岩之前,我老是要看一下指南手册中的线路并浏览之前来此一游的人留下的倡议和忠言。可是,不论指南手册有多磨好,在实验一次特定的具有应战性的攀爬之前,你都必需付诸实践的举动。一样,在你面对办理的功能成绩大概营运一个高吞吐量的站点之前,你只能千方百计编写高功能Web使用程序。
我们团体履历来安闲微软ASP.NET团队处置底层架构程序司理,运转和办理www.asp.net,并帮忙架构CommunityServer过程当中的履历,CommunityServer是几个着名的ASP.NET使用程序的下一个版本(它将ASP.NETForums,.Text和nGallery整合到一个平台)。我确信这些匡助过我的技能也会对你有所裨益。
你应当思索将使用程序分别成几个逻辑层。你大概传闻过术语3-层(或n-层)物理系统布局。它们一般是跨历程和/或硬件对功效举行物理分别的划定的系统布局形式。当体系必要伸缩时,更多的硬件能被增加。但是,老是应当制止与历程和呆板劳碌水平相干的功能成绩。以是,不论甚么时分,只需大概,都要在不异的使用中一同运转ASP.NET页面及其相干的组件。
因为代码和层之间的界限分别,利用Web服务或远程挪用将下降20%以上的功能。
数据层则略微有些分歧,由于数据库一般都用专门的硬件。可是,数据库的处置本钱仍旧很高,因而最优化代码时,数据层的功能应当是首当其充要存眷的中央。
在动手办理你的使用程序的功能成绩之前,必定要分析使用程序,断定成绩之地点。猎取关头的功能计数器值(照实现渣滓搜集所花工夫之百分比的功能计数器的值)关于查找使用程序在那边最耗时也长短常主要的。依附直觉经常也能找到耗时地点。
本文所形貌的功能改善有两品种型:年夜型优化,如利用ASP.NETCache,和不休反复举行的微型优化。这些微型优化偶然很成心思。对代码的小小修改便会引发很年夜的动态,发生成千次的挪用。关于年夜型优化,你大概会看到全体功能的年夜腾跃。而对微型优化,给定哀求大概只是毫秒级的调剂,但按天天的哀求总数盘算,其了局的改善多是伟大的。
数据层的功能
当调剂某个使用程序的功能时,有一个复杂的试金石,你能够用它按前后序次:反省代码是不是存取数据库?假如是,多长工夫存取一次?注重不异的测试也能够被使用于利用Web服务或远程挪用的代码,但我们本文中不触及这方面内容。
假如在特定的代码流程中必需具有对数据库的哀求和要考查别的方面,如:想对字符串处置举行优先优化,那末临时把它放一放,先依照下面定好的优先序次来做。除非你有与众不同的功能成绩,不然你的工夫应当用在实验最优化与数据库的毗连所花的工夫,前往的数据量和多长工夫往复一次和数据库的通信上。
有了这些归纳综合信息,上面就让我们来看看能匡助你改良使用程序功能的十个技能。我将从能取得最明显效果的改动入手下手。
技能1――前往多个了局集
复审你的数据库代码,看看是不是有多于一次的对数据库的会见哀求。如许每次往复数据库都下降你的使用程序能处置的每秒哀求数。经由过程在单个数据库哀求中前往多了局集,你能下降与数据库通讯的整体工夫。同时你也将使体系更具伸缩性,由于你削减了数据库服务器处置哀求的包袱。
固然你能够用静态SQL前往多了局集,我更喜好利用存储过历程。是不是将营业逻辑驻留在存储历程傍边是个有待争辩的成绩,但我以为,假如存储过程当中的逻辑能束缚前往的数据(下降数据集的尺寸,在收集上传输的工夫和逻辑层不用过虑数据),这是一件功德情。
利用SqlCommand命令实例及其ExecuteReader办法来处置强范例的各个营业类,你经由过程挪用NextResult能够向前挪动了局集指针。Figure1树模了处置几个带范例的ArrayLists例子会话。从数据库只前往你必要的数据还会下降服务器上内存的分派。
技能2――分页数据存取
ASP.NETDataGrid供应了十分好的才能:数据分页撑持。当启用DataGrid中的分页功效,则每次只显现流动数目的纪录。别的,分页用户界面也会显现在DataGrid底部用于导航纪录。分页用户界面同意你向前向后导航所显现的纪录,一次显现流动数目的纪录。
有一个十全十美的是用DataGrid分页必要将一切数据邦定到此栅格控件(gird)。比方,你的数据层必需前往一切数据,然后DataGrid将依据以后页过滤失落一切显现的纪录。当你经由过程DataGrid举行分页时,假如有100,000笔记录被前往,那末每一个哀求有99,975笔记录将被放弃失落(假定页尺寸为25)。当纪录数不休增添,此使用程序的功能便会蒙受疾苦,由于每次哀求所要发送的数据会愈来愈多。
编写较好的分页代码的一个好的办法是用存储历程。Figure2树模了一个用Northwind数据库中Orders表经由过程存储历程分页的例子。很复杂,只需你在页面中传送索引和页尺寸便可。响应的了局集先被盘算然后被前往。
在CommunityServer中,我们编写了几个分页控件来完成数据分页。你将会看到,我利用了技能1中会商的思绪,从一个存储过程当中前往连个了局集:总纪录数和哀求的数据。
前往的总纪录数依附于所实行的查询分歧而分歧。比方,某个WHERE子句可被用于束缚前往的数据。为了盘算在分页用户界面显现的总页数,前往的总纪录数必需是已知的。比方,假如有1,000,000笔记录,用一个WHERE子句对之过滤后为1,000笔记录,则分页逻辑必需要晓得总纪录数以便在分页用户界面中准确出现。
技能3――毗连池
创建Web使用程序与SQLServer之间的TCP毗连是一项高贵的操纵。微软的开辟职员使用毗连池手艺已有好长一段工夫了,这个手艺使他们能重用到数据库的毗连。而不是每次哀求都创建新的TCP毗连,新毗连仅在毗连池中得不到毗连时才创建。当毗连被封闭时,它被前往到毗连池中,在那边它仍旧坚持与数据库的毗连,与完整断开TCP毗连相反。
固然,你必要防备泄露的毗连。当你处置终了,必定要封闭毗连。重申一次:不论人们怎样吹捧微软.NET框架中的渣滓搜集特征,每当你处置终了,必定要显式地挪用毗连工具的Close或Dispose办法。不要期望大众言语运转时(CLR)来为你准时扫除和封闭毗连。CLR终极将烧毁类并强行封闭毗连,但你没法包管该工具的渣滓搜集届时会起感化。
为了充实用好毗连池,有几条划定规矩必需了然于心。起首,翻开毗连,举行处置,然后封闭毗连。宁肯每一个哀求的毗连翻开和封闭屡次,也不要坚持毗连翻开形态和在分歧的办法间将它传来传往。其次,利用不异的毗连串(假如你利用集成身份反省,那末也要用不异的线程身份)。假如你不必不异的毗连串,比方,依据登任命户来定制毗连串,你将没法失掉毗连池所供应的不异的最优化值。当摹拟年夜用户量情况时,假如你利用集成身份反省,那末你的毗连池将效率年夜减。.NETCLR数据功能计数器在试图跟踪任何与毗连池有关的功能成绩时长短常有效的。
不论甚么时分,只需你的使用程序毗连到运转在别的历程中的资本,好比某个数据库,你都应当针对毗连到资本所耗工夫,发送和吸收数据所耗工夫和往复次数举行优化。为了完成较好的功能,应当首当其充优化使用程序中任何品种的劳碌历程。
使用层包括到数据层的毗连和将数据转换成成心义的类实例和营业处置的逻辑。以CommunityServer为例,你要在个中处置Forums和Threads汇合;和使用允许如许的营业划定规矩;特别主要的是缓冲(Caching)逻辑也完成个中。
技能4――ASP.NETCacheAPI
在编写代码之前要做的优等年夜事之一是最年夜限制地构建使用层并开掘ASP.NET的Cache特征。
假如你的组件在ASP.NET使用程序内运转,那末你只必要在使用程序工程中援用System.Web.dll便可。当你必要会见Cache时,用HttpRuntime.Cache属性(不异的工具也能够经由过程Page.Cache和HttpContext.Cache会见)。
缓冲数占有几个原则。起首,假如数据能被利用屡次,缓冲是个好的后选计划。其次,假如数据对给定哀求或用户是一样平常的数据而非公用数据,那末最好是选择缓冲。假如数据用户或哀求公用,假如必要保留期很长但大概不被常常利用,那末仍旧要用缓冲。第三,经常被疏忽的一个原则是偶然缓冲太多的器材。一样平常来讲,在x86呆板上,为了下降内存不敷毛病的概率,运转某个历程不要凌驾800MB公有字节。因而,缓冲应当有个下限。换句话说,你大概能重用某个盘算的了局,但假如该盘算有10个参数,你大概试图针对10个置换举行缓冲,如许做大概会给你带来贫苦。ASP.NET供应的最多见的容错是由掩盖缓冲招致的内存不敷毛病,特别是年夜型数据集。
Cache有几个主要特征是必需要懂得的。第一个是Cache完成了比来起码利用(least-recently-used)算法,同意ASP.NET强迫Cache扫除操纵――假如可用内存下落到低程度――则主动从Cache中删除不利用的项目。第二个是Cache撑持依附性到期特征,它能强迫包含工夫,键值,文件生效。工夫经常被利用,但ASP.NET2.0引进了具有更壮大的生效范例:数据库缓冲生效。也就是当数据库中的数据改动时,缓冲中的条目会主动删除。有关数据库缓冲生效的更多信息拜见DinoEsposito在MSDN杂志2004年七月刊的CuttingEdge专栏文章。该缓冲的系统布局,拜见Figure3。
Figure3ASP.NETCache
技能5――预哀求缓冲(Per-RequestCaching)
在本文后面,我曾提到对频仍实行的代码块所做的小小修改大概发生很年夜的,全体功能的提拔。我把个中一个我出格中意的叫做预哀求缓冲(per-requestcaching)。</p>只要你想学,就没什么优缺点,上面那位大哥已经把网上的评论说了,但我认为想学哪个都一样,不然它就不可能在当今时代数字艺术方面存活到今天 |
|