[没有分类]性能优化总结。
阅读: 129 评论: 1 作者: 月阳 发表于 2010-03-09 23:51 原文链接
最近在领导的要求下做了一下项目的优化,总结如下:
1. 使用存储过程, (如果在程序里用exec 存储过程 参数,这样执行似乎并没有快多少)
在数据库里是预编译的,也不需要在字符串传输上花费大量时间。 防sql注入攻击。
2. 尽量优化数据库语句,使逻辑尽量简单。 @ 还有就是在使用函数时 charindex >like > padindex 效率依次递减。 @查询字段是否包含在以,分隔的字段串时,最好不要用in 速度非常慢。 还有好多,可以总结的,这里就不再描述了。
3. EnableViewState(页面的视图状态)。如果无特殊要求设置为false。
使用ViewState ,每个对象都必须先序列化到 ViewState 中,然后再通过回传进行反序列化,因此使用 ViewState是没有代价的。尽量减少使用对象,如果可能,尽量减少放入 ViewState 中的对象的数目。下面情况基本上可以禁用viewstate:
(1)页面控件 (.ascx)
(2)页面不回传给自身。
(3)无需对控件的事件处理。
(4)控件没有动态的或数据绑定的属性值(或对于每个postpack都在代码中处理)
单个页面或每个页面都禁用 ViewState,如下所示:
单个页面:<%@ Page EnableViewState="False" %>
每个页面:在 web.config 中 <Pages EnableViewState="false" />
EnableSessionState保持默认值即可(如果页面用到sessionstate它才会占用资源)。
EnableViewStateMac如果无安全上的特殊要求,保持默认值。
4. Pagelayout.页面布局模型。建议使用Flowlayout(元素不带绝对定位属性添加).Gridlayout(绝对定位属性)由于采用绝对定位,将会比Flowlayout生产更多的代码,主要是控件的定位信息。 radiobuttonlist 和 checkboxlist等
5. 项目发布的时候切记解除页面的Debug状态
6. 尽量选择html控件。能在客户端实现的功能就在客户端实现(熟练掌握javascript),减少服务器的压力。数据控件选择顺序:Repeater、DataList、DataGrid
7. 在建立数据库连接后只有在真正需要操作时才打开连接,使用完毕后马上关闭,从而尽量减少数据库连接打开的时间,避免出现超出连接限制的情况
8. 字符串操作性能优化
使用值类型的ToString方法
在连接字符串时,经常使用"+"号直接将数字添加到字符串中。这种方法虽然简单,也可以得到正确结果,但是由于涉及到不同的数据类型,数字需要通过装箱 操 。作转化为引用类型才可以添加到字符串中。但是装箱操作对性能影响较大,因为在进行这类处理时,将在托管堆中分配一个新的对象,原有的值复制到新创建的对象中。使用值类型的ToString方法可以避免装箱操作,从而提高应用程序性能。
运用StringBuilder类
String类对象是不可改变的,对于String对象的重新赋值在本质上是重新创建了一个String对象并将新值赋予该对象,其方法 ToString对性能的提高并非很显著。在处理字符串时,最好使用StringBuilder类,其.NET 命名空间是System.Text。该类并非创建新的对象,而是通过Append,Remove,Insert等方法直接对字符串进行操作,通过 ToString方法返回操作结果。
9.只要可能就缓存数据或页输出
ASP.NET 提供了一些简单的机制,它们会在不需要为每个页请求动态计算页输出或数据时缓存这些页输出或数据。另外,通过设计要进行缓存的页和数据请求(特别是在站点中预期将有较大通讯量的区域),可以优化这些页的性能。与 .NET Framework 的任何 Web 窗体功能相比,适当地使用缓存可以更好的提高站点的性能,有时这种提高是超数量级的。使用 ASP.NET 缓存机制有两点需要注意。首先,不要缓存太多项。缓存每个项均有开销,特别是在内存使用方面。不要缓存容易重新计算和很少使用的项。其次,给缓存的项分配的有效期不要太短。很快到期的项会导致缓存中不必要的周转,并且经常导致更多的代码清除和垃圾回收工作。若关心此问题,请监视与 ASP.NET Applications 性能对象关联的 Cache Total Turnover Rate 性能计数器。高周转率可能说明存在问题,特别是当项在到期前被移除时。这也称作内存压力。
10. 使用 HttpServerUtility.Transfer 方法在同一应用程序的页面间重定向
采用 Server.Transfer 语法,在页面中使用该方法可避免不必要的客户端重定向。但要根据情况区分response.redirect .response.execute的使用方法。 区别对待。
11.适当地使用公共语言运行库的垃圾回收器和自动内存管理
小心不要给每个请求分配过多内存,因为这样垃圾回收器将必须更频繁地进行更多的工作。另外,不要让不必要的指针指向对象,因为它们将使对象保持活动状态,并且应尽量避免含 Finalize 方法的对象,因为它们在后面会导致更多的工作。特别是在 Finalize 调用中永远不要释放资源,因为资源在被垃圾回收器回收之前可能一直消耗着内存。最后这个问题经常会对 Web 服务器环境的性能造成毁灭性的打击,因为在等待 Finalize 运行时,很容易耗尽某个特定的资源。
12.不要依赖代码中的异常
因为异常大大地降低性能,所以您不应该将它们用作控制正常程序流程的方式。如果有可能检测到代码中可能导致异常的状态,请执行这种操作。不要在处理该状态之前捕获异常本身。常见的方案包括:检查 null,分配给将分析为数字值的 String 一个值,或在应用数学运算前检查特定值。下面的示例演示可能导致异常的代码以及测试是否存在某种状态的代码。
13.使用 HttpResponse.Write 方法进行字符串串联
该方法提供非常有效的缓冲和连接服务。但是,如果您正在执行广泛的连接,请使用多个 Response.Write 调用。下面示例中显示的技术比用对 Response.Write 方法的单个调用连接字符串更快。
Response.Write(strString);
Response.Write("boxbig");
14.除非有特殊的原因要关闭缓冲,否则使其保持打开
禁用 Web 窗体页的缓冲会导致大量的性能开销。
使用 Page.IsPostBack 避免对往返过程执行不必要的处理
虽然您很可能希望尽量多地使用 Web 窗体页框架的那些节省时间和代码的功能,但在某些情况下却不宜使用 ASP.NET 服务器控件和回发事件处理。通常,只有在检索或存储数据时,您才需要启动到服务器的往返过程。多数数据操作可在这些往返过程间的客户端上进行。
在对ASP.NET应用程序进行性能测试之前,应确保应用程序没有错误,而且功能正确。具体的性能测试可以采用以下工具进行:Web Application Strees Tool (WAS)是Microsoft发布的一个免费测试工具,可以从http://webtool.rte.microsoft.com/上下载。它可以模拟成百上千个用户同时对web应用程序进行访问请求,在服务器上形成流量负载,从而达到测试的目的,可以生成平均TTFB、平均TTLB等性能汇总报告。 Application Center Test (ACT) 是一个测试工具,附带于Visual Studio.NET的企业版中,是Microsoft正式支持的web应用程序测试工具。它能够直观地生成图表结果,功能比WAS多,但不具备多个客户机同时测试的能力。服务器操作系统"管理工具"中的"性能"计数器,可以对服务器进行监测以了解应用程序性能。
评论: 1 查看评论 发表评论
找优秀程序员,就在博客园
最新新闻:
· Windows版Opera存高危缺陷 正开发补丁软件(2010-03-09 23:01)
· 亚马逊招募浏览器开发者 Kindle将配专用浏览器(2010-03-09 22:37)
· 斯坦福大学调查:学生用户对iPhone迷恋成瘾(2010-03-09 22:32)
· 浏览器大穿越,体验恐龙级浏览器Mosaic(2010-03-09 22:26)
· 美国网民平均每人月观看近200段视频(2010-03-09 22:20)
编辑推荐:微软 MIX10在即,我们会看到什么?
网站导航:博客园首页 个人主页 新闻 闪存 小组 博问 社区 知识库

德国艺术家Dornroeschen Filzunikate用羊毛毡做的漂亮温暖的猫窝。羊毛毡保暖还不容易脏,清洗也容易。网上有卖羊毛毡的,有兴趣的猫友可以试着为自己的猫咪做一个艺术猫窝。
原始链接:http://www.unicornblog.cn/user1/unicornblog/index.html
diglog链接:http://www.diglog.com/story/life_pet_332062.html
阅读: 210 评论: 3 作者: lerit 发表于 2010-03-09 13:22 原文链接
这个程序是注册网站的数据库,从而提供Membership , Role , Profile 等等诸多功能和管理权限的控件的使用。今天也自己试试用这个工具来配置一下。首先在数据库中建立了一个数据库,名称为TESTDB,然后新建了一个sqlserver的登录名(testdb),指定了testdb为TESTDB的默认数据库。然后就开始配置了。
配置过程是参考《aspnet_regsql.exe 工具注册数据库》的,但是到了选择服务器和数据库时候,填写了正确的服务器名,选择sql server身份验证,填写了新建的testdb用户名和密码,然后点选下拉框来选择目标数据库,此时出现了错误提示:(未能查询SQL Server中的数据库名称列表。无法打开用户默认数据库,登录失败,用户‘testdb’登录失败)
哦哦,对了,忘了授权了,这个用户没有登录权限呢,为了保证不会因为是权限问题而导致配置失败,我给予此用户sysadmin的最高权限。然后重新运行于此,但是依然报如下错误:(未能查询SQL Server中的数据库名称列表。对象名‘sysdatabases’无效)
这就奇怪了,我试了试用sa,就没问题,可以显示数据库中的所有数据库的名称,莫非还是权限不够??我知道sysdatabases是系统表中的一个视图,用于读取所有的数据库名,于是用testdb登录数据库,试着执行此命令:
select * from sys.sysdatabases
没问题,可以显示出各个表名啊,应该不是这个访问权限问题。那怎么办?
解决办法:抱着试试的态度,我在上面图中的数据库那个下拉框中,直接填写了我的数据库名:TESTDB,点击下一步,竟然通过了~~~,配置成功后,去数据库中查看,果然有自动生成的那11个以asp_开头的表和那些试图和存储过程等。
结论:不知道问题出在哪里,虽然没有解决这个“问题”,但是绕过去了,所以,应该是配置工具的问题。
评论: 3 查看评论 发表评论
找优秀程序员,就在博客园
最新新闻:
· 一家行业组织将推进开源数据中心设计(2010-03-09 14:33)
· Goole与Dish Network合作 测试新电视节目搜索服务(2010-03-09 14:17)
· 人人网推出网络招聘平台(2010-03-09 14:07)
· iPhone专用香肠上市 韩国人表示这是模仿(2010-03-09 13:58)
· 盛大可以模仿迪斯尼,但模仿不出米老鼠(2010-03-09 13:48)
编辑推荐:关于 HTML5,开发者可以期待什么?
网站导航:博客园首页 个人主页 新闻 闪存 小组 博问 社区 知识库
[没有分类]WF4.0:从XAML中加载工作流
阅读: 260 评论: 7 作者: 麒麟 发表于 2010-03-09 12:53 原文链接
大多数时候,我在Windows Workflow Foundation 4编译工作流时,它非常简单和方便,先设计工作流,然后编译和在运行时就会有一个用于创建和运行工作流的.NET类型。主要缺点是,这种方法不是很灵活,有时你希望能够在运行时改变您的工作流的定义或者将它存储在数据库中,重新编译是不可取的。
幸运的是,我们还可以从XAML文件本身加载工作流和执行返回的工作流活动。使用ActivityXamlServices类能做到这些,它将让我们加载XAML文件并返回一个活动,确切地说,它返回一个封装好流程定义的DynamicActivity。
最简单的方法就是传递一个文件名做参数调用Load() ,例如:
如果您使用本地程序集中的活动或其他类型,这是要失败的,但你可以用稍微详细方式去实现,例如:
var reader = new XamlXmlReader("YourWorkflow.xaml", settings);
Activity workflow = ActivityXamlServices.Load(reader);
需要使用XamlXmlReaderSettings来说明XAML需要引用那些本地的程序集。
备注:这篇文章的使用环境是.NET framework 4.0 RC 1
原文:http://msmvps.com/blogs/theproblemsolver/archive/2010/03/07/loading-xaml-workflows-in-wf4.aspx
评论: 7 查看评论 发表评论
找优秀程序员,就在博客园
最新新闻:
· 一家行业组织将推进开源数据中心设计(2010-03-09 14:33)
· Goole与Dish Network合作 测试新电视节目搜索服务(2010-03-09 14:17)
· 人人网推出网络招聘平台(2010-03-09 14:07)
· iPhone专用香肠上市 韩国人表示这是模仿(2010-03-09 13:58)
· 盛大可以模仿迪斯尼,但模仿不出米老鼠(2010-03-09 13:48)
编辑推荐:关于 HTML5,开发者可以期待什么?
网站导航:博客园首页 个人主页 新闻 闪存 小组 博问 社区 知识库
[没有分类]WF4.0 RC 官方示例
阅读: 528 评论: 2 作者: 魔幻天空 发表于 2010-03-09 11:57 原文链接
伴着RC的发布,微软给出了WF4.0 RC的Samples,为大家学习提供了很好的资源.不过我的机器有一些项目打开之后会报错,不能显示XAML的流程图,不知是不是个别现象.
下载地址为:
http://download.microsoft.com/download/1/5/9/159D6D71-7728-45D4-BC15-5DF1F2DDCD94/WF_WCF_Samples.exe
内容分类如下:
Application (Samples)--整体演示
-Document Approval Process (文档审批,一个基本的业务流程)
-Corporate Purchase Process(企业采购,服务寄宿于web&win)
-Hiring Process(雇佣流程,使用Messaging Activities,多流程同时存在于WorkflowServiceHost)
-Visual Workflow Tracking(可视化流程跟踪.利用流程设计器WorkflowDesigner实现可视化跟踪)
-Suspended Instance Management(演示流程挂起)
Basic--细节讲解
-Built-in Activities(Activity使用)
-Compensation (Samples)(使用补偿及自定义补偿)
-Custom Activities(自定义Activity)
-Designer(设计器编程-这里主要讲使用对自带设计器编程)
-Designer ReHosting(设计器重寄宿,自定义流程设计器)
-Execution(执行工作流,包括三种方式<WorkflowApplication><WorkflowInvoker><WorkflowServiceHost>)
-Expressions(使用VB表达式)[这个例子我用RC打开竟然报错!,看了下XAML例子很简单,输入一些参数,利用VB表达式求个最大最小值,再输出,不看也罢]
-Migration(迁移,包括将3.0,3.5的工作流迁移至4.0上来,以及将旧版本的Activity包装,以便4.0调用的
Interop activity演示)
-Persistence(持久化,讲解利用默认的持久化数据库进行跟踪以及自定义持久化服务)
-Rules Samples(规则)
-Services(WF其他服务)[这部分内容比较杂,主要四对一些个人认为不太常用的服务进行演示)
-Tracking(跟踪服务,讲解利用默认的Tracking数据库进行跟踪以及自定义Tracking服务)
-Transactions(使用事务)
-Validation(验证,提供对WF流程中参数添加约束的实现方法)
Scenario--应用方案
-Activity Library(Activity应用方案,同时提供了一些自定义的Activity)
-Services(服务应用发难)
-Transactions(事务应用方案)
-Auto-Confirm Pattern(自动完成模式,实现了一个自动完成Scope,包括[第一次同意后,再次进入将自动同意]等功能)
-StateMachine Scenario Using a Combination of FlowChart and Pick(用FlowChart和Pick两个Activity实现秒表)
-WPF and WF Integration in XAML(WF和WPF整合,例子给出的是将WPF的窗体XAML应用到到WF中,同时利用窗体对WF参数进行赋值)
-External Ruleset Toolkit(提供一个有关如何具体化工作流程序集的规则的示例)
评论: 2 查看评论 发表评论
找优秀程序员,就在博客园
最新新闻:
· 一家行业组织将推进开源数据中心设计(2010-03-09 14:33)
· Goole与Dish Network合作 测试新电视节目搜索服务(2010-03-09 14:17)
· 人人网推出网络招聘平台(2010-03-09 14:07)
· iPhone专用香肠上市 韩国人表示这是模仿(2010-03-09 13:58)
· 盛大可以模仿迪斯尼,但模仿不出米老鼠(2010-03-09 13:48)
编辑推荐:关于 HTML5,开发者可以期待什么?
网站导航:博客园首页 个人主页 新闻 闪存 小组 博问 社区 知识库
[没有分类]小论面向对象编程方法
阅读: 612 评论: 1 作者: 袁永福 发表于 2010-03-09 11:21 原文链接
在软件开发中,使用面向对象编程方法是一种放长线吊大鱼的策略,首先要高瞻远瞩,然后精耕细作,最后全面开花完成软件开发任务。
面向对象编程思想是适应当前软件开发规模原来越大,复杂度越来越高的情况。软件开发的工作量随着软件规模的增加而呈非线性增长,软件规模越大,软件开发工作量增长的速度越来快。而使用传统的面向过程的编程方法,开发人员的工作量和软件开发工作量是成正比的,因此当软件规模很大时,开发人员的工作量将非常巨大,从而导致软件开发成本急剧上升,这对于商业软件开发是不可行的。而软件客户的复杂的需求是客观存在的,是需要满足的,因此业界开始使用面向对象的编程方法来降低软件开发成本。【袁永福 http://www.cnblogs.com/xdesigner】
从宏观上看,面向对象编程思想的最大的作用就是将一个整体上复杂的软件功能拆分成多个功能简单的软件功能,然后以较低的成本实现各个简单的软件功能,最后进行模块集成形成一个完整而复杂的软件功能来满足用户需求。采用的是分割包围,各个击破的策略。

如上图所示,阴影部分的面积就是软件开发工作量。当采用面向过程的软件开发方法,当客户需求很复杂时,软件开发工作量将非常大,而采用面向对象的软件开发方法时,开发人员可以将复杂的客户需求拆分成两个较为简单的客户需求,然后逐一开发,最后进行集成实现所需的功能,此时软件开发工作量降低了一半,是否采用正确的方法,效果的对比是惊人的。因此采用面向对象的软件开发方法,以较低的成本开发客户需求复杂的商业软件成为现实。
从软件开发过程看,面向对象编程思想强制添加了一个软件抽象的步骤,迫使软件开发人员需要跟深入的了解和分析用户需求,从而增加了软件开发流程的稳定性和正规性。
从实现方法上看,面向对象编程思想更加符合人们对客观事物的理解方法。考察人们在理解客户事物的过程,人们会有意无意的将诸多事物进行分类整理和对比。【袁永福 http://www.cnblogs.com/xdesigner】
比如人们经过大量的认识,把汽车抽象理解为有至少4个轮子和2个车轴的机动车辆,而客车就是专门运输人员的汽车,公交车就是任何人交费就可以乘坐的客车。于是形成了“机动车—汽车—客车—公交车”这4种客观事物和3个派生关系构成的关于汽车的认识。这个认识方式学习成本低,速度快,知识能重复利用是其最大的优点。
若不用这种分类比较的方法,则汽车就定义为至少4个轮子2个车轴的机动车;客车就是专门运输人员的至少4个轮子和2个车轴的机动车;公交车就是任何人交费就可以乘坐的专门用于运输人员的至少有4个轮子和2个车轴的机动车。对于两种认知方式可以进行如下对比【袁永福 http://www.cnblogs.com/xdesigner】
|
事物 |
分类对比 |
不分类对比 |
|
汽车 |
至少有4个轮子和2个车轴的机动车。 |
至少有4个轮子和2个车轴的机动车。 |
|
客车 |
专门运输人员的汽车。 |
专门运输人员的至少4个轮子和2个车轴的机动车。 |
|
公交车 |
任何人交费就可以乘坐的客车。 |
任何人交费就可以乘坐的专门用于运输人员的至少有4个轮子和2个车轴的机动车。 |
显而易见,若不采用分类对比的认知方式,人们认知事物的成本就大为增加,相信任何人都没能力能认识这个世界的繁杂事物的。但事实上,智力正常的人都自觉地采用这种分类对比的认知方法,从而轻易的认知周围所有的事物。
软件开发也一样,软件是开发人员对客户需求的认知的表述。不理解功能需求就不可能开发出正确的软件。就像汽车一样,用户需求也是客观存在的事物,面对复杂的客户需求,采用分类对比的方式是明智之举。因此面向对象的编程方法就是分类对比的方法在软件开发中的具体实现。
分类对比的认知方式最大的优势就是知识的重复利用,于是面向对象编程思想最大的优势就是代码的重复利用。代码的重复利用有两大好处,一个就是代码寿命明显变长,能很大的保护客户的投资,另外一个就是能层层积累,降低对新知识的学习量。【袁永福 http://www.cnblogs.com/xdesigner】
代码就是客户已有的投资的结果,商业软件开发人员应当要充分的考虑到对客户已有投资的保护,在成本允许的情况下旧代码应当尽量保存。
代码是软件的细胞,代码的长寿是软件长寿的基础,也是客户的投资价值最大化的基础。
评论: 1 查看评论 发表评论
找优秀程序员,就在博客园
最新新闻:
· 一家行业组织将推进开源数据中心设计(2010-03-09 14:33)
· Goole与Dish Network合作 测试新电视节目搜索服务(2010-03-09 14:17)
· 人人网推出网络招聘平台(2010-03-09 14:07)
· iPhone专用香肠上市 韩国人表示这是模仿(2010-03-09 13:58)
· 盛大可以模仿迪斯尼,但模仿不出米老鼠(2010-03-09 13:48)
编辑推荐:关于 HTML5,开发者可以期待什么?
网站导航:博客园首页 个人主页 新闻 闪存 小组 博问 社区 知识库
[没有分类]LED羽毛球套装---创意产品----酷品网

给羽毛球拍和羽毛球装上LED小灯,让您可以在傍晚光线不好的时候可以多享受一会儿羽毛球运动的乐趣,相信爱好打羽毛球的您一定不会错过它。售价:39.99美元
原始链接:http://www.kooideas.com/Article/2254.html
diglog链接:http://www.diglog.com/story/technology_design_332045.html
阅读: 342 评论: 1 作者: 酸甜西瓜 发表于 2010-03-09 09:24 原文链接
在通过IE直接下载文件的时候,我们可能会遇到一个比较常见的问题,那就是:我们下载的文件的文件名如果过长的话,就会出现,弹出的提示框的文件标题名变成乱码,即“%f%e%1”这样的乱码,而且点击保存到本地,文件的名称同样是乱码,一般我们使用的代码如下:
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-disposition", "attachment;filename=" + HttpUtility.UrlEncode(strAccFileName, Encoding.UTF8) + "");
Response.CacheControl = "Private";
Response.BinaryWrite(objFileBuf);
Response.Flush();
经过我们测试,strAccFileName支持的字符长度在32个以下,如果超过该长度,即会出现我们开始描述的乱码问题,所以,我们对超过32个字符以外的字符进行了认为截取,并使用“……”作为省略的象征,这样能够稍微缓解一下问题,毕竟不会出现客户认为的异常的乱码了,但是如果客户坚持要保证完整用户名下载,并且其用户名实在是非常的长的情况的话,那我们暂时只能考虑使用其他的下载方式,或者自己重新设计编写一个下载界面,是可以解决问题的。
最后说一点,我使用的浏览器是IE8 Beta版,但启用的是IE7的应用,出现的情况却是名称的前面字符出现了乱码,但是,有一部分内容是正常的,但是,在IE6中,却是全部都是乱码,不知道是否做了优化?但我们最终还是选择了多截取一部分内容,以保证出现乱码的问题。
评论: 1 查看评论 发表评论
找优秀程序员,就在博客园
最新新闻:
· Mochi Media与盛大游戏成立游戏开发者基金(2010-03-09 10:06)
· 淘宝启动24小时自助维权平台(2010-03-09 10:04)
· 诺基亚两款概念手机Stealth/Dragonfly曝光(2010-03-09 09:45)
· IE6必须死 却没人做得到(2010-03-09 09:41)
· 南方日报:QQ的平台化价值是如何创造的?(2010-03-09 09:29)
编辑推荐:史上最强女游戏程序员
网站导航:博客园首页 个人主页 新闻 闪存 小组 博问 社区 知识库



