对ASP.NET网站高性能和多并发的设计的讨论

动漫设计系统(基于ASP.NET的动态网站) 动漫设计系统(基于ASP.NET的动态网站) 一、系统概述及开发工具 系统概述 动漫管理系统使用ASP.NET分层开发技术,集增加,删除,修改,查询四个功能模块,用户可以进行相应的操作,这里是动漫的交流场所,用户们可以进行浏览查询,可以根据自己的了解进行添加删除,欢迎大家来踩网。 同时,在动漫管理系统中,管理员可以登录进入系统,等等。 该系统使得所有用户对自己的信息维护与管理更加及时、高效,提高... 阅读详情

来自:http://blog.youkuaiyun.com/shyleoking/article/details/7277898

对以下文章内容我要说明下,在财大气粗的互联网公司或为财大气粗的客户服务的不缺钱的主,请立即绕行,以下内容不适合您。

以下内容为客户计算资源紧缺,预算紧缺,无法通过增大带宽,增多服务器,购买各种高级服务的程序员们进行讨论。

谢谢



对于如何提高应用程序的性能(无论是互联网应用还是企业级应用)我的观点一直是考虑一个核心:IO处理。因为我认为目前的CPU的处理能力已经是非常高了,正常编写的在内存中处理的代码没有太严重的问题都不会对CPU造成很大的影响,性能往往是被IO所限制。由于我和我的团队沟通时间比较长,所以我们之间的一个简单的IO说明往往覆盖了很多的含义,这些IO包括了磁盘IO、网络IO、内存IO以及各种设备的IO处理。我们的团队经验是尽可能的在各种IO处理中寻找出可以提升的效率。



以下,我将从后向前说明我们团队在提升IO处理的经验和认识


1 数据库
数据库是最明显的消耗磁盘IO的组件,提高数据的性能有多种,SQL语句写的好,也是减少了表的扫描(明显是IO动作),设计合理的索引又是提高了IO处理能力,将不在变化的历史数据独立的存储也减少了复杂IO的处理,为表设计冗余的字段也是为了减少IO读写提高性能,将数据表分布在不同的磁盘上也是提升IO效率。还有其他的各种方式,比如查询缓存、连接池神马的,原则同样如此。

总之,减少数据库和磁盘之间过度的活动,能尽可能的提升数据库效率。




2 数据缓存
内存IO的处理效能自然要远高于磁盘IO,数据的缓存就是减少磁盘操作,或至少减少性能更低的数据库操作。对于页面的结果数据缓存我们的通常简单方案是准备两个缓存区:一个内存,一个文件
内存的缓存区,我们直接用HttpRuntime.Cache,在这个缓存区中我们放置特征码和数据(数据往往是页面需要的数据,一般我们放置JSON格式),过期策略上我们自然选择NoAbsoluteExpiration。
当数据需要从内存缓存区中被撤掉时,我们会将这个过期数据再次处理,我们在Cache中有一个集合,这个集合放置了被撤掉的缓存数据的特征码,而对应的数据写入磁盘上的一个文件中。
用户请求数据时,先检查特征码是否在正常的缓存中,如果不在,则检查是否在过期区,如果是过期区,则去读取磁盘文件(至少减少了数据库开销),都没有,那去查数据库吧。


3 对集合的代码处理
无论是页面的javaScript,还是后台的java,C#,在目前的业务中对集合/数组的操作肯定是最频繁的,考虑用一些细节上的优化,也可以提高性能
[csharp]  view plain copy
  1. int[] arr = { 1, 3, 6, 7, 3, 6, 7, 3, 5 };  
  2.   
  3. for (int i = 0, max = arr.Length; i < max; i++)  
  4. {  
  5.     System.Console.WriteLine(arr[i]);  
  6. }  


类似很多技巧都是减少对集合Length/Count的反复确认对高频的集合操作是有益的。当然集合中不能动态的加减数据。数组优先、泛型其次,arrayList最后考虑,这些选取的原因都是减少IO开销。
还有很多代码的细节都是可以提高效率,比如对string的认知什么的。
(林永坚MVP 提示我没有表达清楚以上意思,我的想法是 :集合我的测试是,如果反复的判断count会比较慢,不如for的时候吧count先求出来,还有就是尽可能的用数组,因为数组初始化的时候已经赋值完毕了,且又是强类型,不知道我表达的对不 )





4 网络传输
后台数据最终要传递给浏览器,减少网络传输的字节也是提高吞吐的重点,简单的说,就是对网络IO处理优化。减少webform中的ViewState信息,或者干脆不用webform,改用MVC,或者直接httpcontext自己来控制所有状态信息。我们采用ashx并且为不同的服务开辟不同的ashx通道提高性能。由于ashx不必做一系列动作、不用经过一连串的事件处理、一大堆的控件状态管理(加载并解析ViewState,还原、更新控件的值、保存ViewState等),直接返回操作结果,也就不用耗费更多的服务器资源,返回的格式也非常好灵活,所有用ashx在基于文档型的网站中我们运用的很好。
另外一点ashx对开发成员的工作隔离也是非常好。
除了编程影响传输,页面需要的图片和css文件,js文件合理的处理减少HTTP请求也能提高网络IO效率:比如将图片合并,js、css压缩等简单的方式虽然改变不多,但并发的时候降低服务器的压力总是好的。




5 页面渲染和体验
优化页面的html结构,有时候为了加快渲染,不必完全符合W3C的规范,减少div嵌套,使用固定宽度,主要javaScript的细节可以提高很好的体验。我在chrome中的测试结果可以发现,很多情况下网络的速度远远高于渲染的速度,所以能提高页面的处理,对个体用户的体验是很有效的。




4 数据提交
在可靠的情况下,多考虑异步模式或多线程。对数据库的提交,web服务的访问都可以使用异步模型,当然是在可靠的情况下。
页面的ajax自然也是异步的一种方式,另外js文件的加载也可以异步的方式。


5 锁

太累了,先不写了


林永坚MVP还提出了用noSQL,恩,是的,不过我还没有好好用呢,不能讲出什么来



最后微博小广告:http://weibo.com/shyleoking



【ASP.NET教程-ASP.NET简介】构建强大的Web应用程序的开发框架 ASP.NET是一种用于构建Web应用程序的开发框架。它是Microsoft.NET平台的一部分,使用C#或VB.NET等编程语言进行开发。ASP.NET支持Web表单、MVC(模型-视图-控制器)和Web API等开发模式。ASP.NET基于服务器端技术,它将Web应用程序的逻辑和用户界面分离,以提供更好的可维护性和灵活性。它还提供了许多内置的功能和控件,用于处理用户输入、数据验证、会话管理等常见的Web开发任务。 阅读详情

相关推荐

ASP.NET Core 开发实战:如何构建高可用、高性能的电商网站

ASP.NET Core电商网站开发实践 本文探讨如何利用ASP.NET Core构建高性能、高可用的电商平台。系统采用微服务架构,结合分布式数据库、Redis缓存和API网关(Ocelot/YARP)提升扩展性。通过服务冗余、负载均衡(Nginx/Kubernetes)和数据库主从复制确保高可用性,运用异步处理、CDN加速和查询优化提升性能。 开发示例展示了用户认证(Identity框架)、商品展示搜索(EF Core)和购物车功能,采用分层架构(Controllers/Models/Services)。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1007

.ashx 一般处理文件阻塞处理,所有页面卡死的解决方案

最近遇到一个ashx请求阻塞的问题,一般处理文件原来只继承System.Web.IHttpHandler,后来了为了读取session 状态,又继承了IRequiresSessionState 接口, 由于在ashx.cs 文件里代码里处理数据的过程中,出现阻塞的问题. 一直找不到为什么会有阻塞的问题. 后来百度一下,找到这一编文章http://gaterking.blog.51cto.co...

weixin_30267697的博客 367

ASP.NET CORE介绍和三层架构MVC的介绍

ASP.NET Core:现代Web开发的基石在当今快速变化的Web开发领域中,ASP.NET Core以其跨平台、高性能和模块化设计的特性,成为许多开发者的首选框架。本文将为您介绍ASP.NET Core的基本概念、主要特性、应用场景以及为什么选择ASP.NET Core进行Web开发。一、ASP.NET Core简介ASP.NET Core是一个跨平台的开源Web框架,用于构建现代、高性能、云就绪的Web应用程序。

Lu_menglin的博客 2158

人生的抉择—aspx、ashx、asmx文件处理请求效率比较

总结: ashx:只是实现IHttpHandler接口 aspx:public class Page : TemplateControl, IHttpHandler 而TemplateControl是: abstract class TemplateControl : Control, INamingContainer, IFilterResolutionService 所以aspx是重型类,所...

sinolover的专栏 1533

ASP.NET MVC 5网站开发之精华秘籍

MVC(Model-View-Controller)设计模式是软件工程中的一种架构模式,用于分离应用程序的逻辑层、界面层和输入控制层。这种模式帮助开发者更清晰地组织代码,并且易于维护和扩展。ASP.NET框架是一个用于构建现代Web应用程序的开源、服务器端的网络开发框架。由微软公司开发,它允许开发者使用.NET语言来构建高性能的Web应用程序。在ASP.NET MVC中,路由系统是一种将浏览器请求映射到控制器动作的机制。路由配置通常在全局.asax文件或Startup类中设置。

weixin_36303305的博客 1022

构建基于ASP.NET与SQLServer的音乐网站:设计与实现大全

本文还有配套的精品资源,点击获取 简介:音乐网站作为现代互联网用户享受音乐的主要方式,需要稳定高效的技术支撑。本项目深入探讨了使用ASP.NET和SQLServer构建音乐网站的各个方面,包括ASP.NET的基础架构、数据库设计、数据访问技术、用户认证授权、页面交互、RESTful API设计、安全性考量及性能优化。通过本项目,开发者可以全面学习Web开发和数据库管理的核心...

weixin_42515392的博客 963

ASP.NET 简介

ASP.NET又称为ASP+,不仅仅是ASP的简单升级,而是微软公司推出的新一代脚本语言。ASP.NET基于.NET Framework的Web开发平台,不但吸收了ASP以前版本的最大优点并参照Java、VB语言的开发优势加入了许多新的特色,同时也修正了以前的ASP版本的运行错误。 ASP.NET具备开发网站应用程序的一切解决方案,包括验证、缓存、状态管理、调试和部署等全部功能。在代码撰写方面特色是将页面逻辑和业务逻辑分开,它分离程序代码与显示的内容,让丰富多彩的网页更容易撰写。同时使程序...

m0_61690793的博客 1万+

构建电子商务网站的ASP.NET开发实践

自2002年首次发布以来,ASP.NET作为微软.NET框架的一部分,已经成为企业级Web应用程序开发的基石之一。它的进化不仅反映了微软对Web技术的持续投资,也标志着开发者社区在Web开发实践上的成熟。用户控件(User Controls)是ASP.NET框架中一种重用代码的机制,允许开发者将可复用的页面片段封装为控件,以便在多个页面中使用。用户控件可以包含HTML标记、服务器控件、逻辑代码和事件处理程序,它通常被封装在一个.ascx文件中。

weixin_42602241的博客 992

C#使用ASP.NET Core Razor Pages构建网站(一)

HTTP协议的基本概念、客户端Web开发技术以及ASP.NET Core框架的关键特点和创建项目方法

qq_42497776的博客 1449

ROS学习【11】-----基于ubuntu16.04上Gazebo机器人环境搭建的传感器仿真(camera、kinect、Lidar),并通过Rviz进行数据显示

ROS学习-----基于ubuntu16.04上Gazebo机器人环境搭建的传感器仿真目录一、Gazebo环境搭建前的准备1、将搭建模型下载到我们的gazebo环境下2、升级我们的gazebo版本二、创建配置launch文件参数的world文件1、进入工程包mbot_gazebo2、创建文件夹worlds3、进入该文件夹4、创建playground.world文件5、创建room.world文件三...

qq_42451251的博客 3605

IGBT模块封装中的银烧结技术:为什么特斯拉和比亚迪都在用这种黑科技?

本文深入解析了IGBT模块封装中的银烧结技术,揭示了其作为功率半导体封装工艺关键升级的原因。该技术通过低温烧结形成高熔点、高导热导电的银连接层,显著提升了模块的功率循环寿命、散热能力和高温工作稳定性,这正是特斯拉、比亚迪等行业巨头采用此项黑科技以释放电动汽车电驱系统极致性能的核心所在。

yhn4567890的博客 833

ASP.NET Core与ASP.NET区别

ASP.NET Core 和 ASP.NET 是微软开发的两种主要的Web开发框架,它们都用于构建动态Web应用程序和服务。尽管它们共享一些相似的概念和特性,但在设计、功能和支持的平台方面存在显著差异。ASP.NET Core 是 ASP.NET 的下一代版本,是一个跨平台、高性能、开源的 Web 应用程序框架。ASP.NET 则是微软开发的一个用于构建 Web 应用程序的框架,只能运行在 Windows 操作系统上。

weixin_42098295的博客 2264

OpenCV+ArUco实战:如何用Python实现高精度二维码测距(附完整代码)

本文详细介绍了如何使用Python和OpenCV实现基于ArUco标签的高精度单目视觉测距。通过相机标定、标签检测和三维位置估算,结合完整代码示例,帮助开发者在机器人导航、工业自动化等场景中实现厘米级距离测量,并探讨了精度优化与三维可视化等进阶应用。

weixin_29052717的博客 474
上一篇: ASP.NET - 使用Web.config配置数据
下一篇: asp.net 突然出现Service Unavailable,程序池当掉
ArvinStudy
博客等级 码龄15年 83粉丝 193原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值