写自已的System.Web.Routing.dll提升性能和增加功能!

  前文《ASP.NET MVC 框架实践总结》发布后,得到了一些朋友的反馈,当然更多的是批评。这就是技术员的严谨作风!

  虽然尽是批评,但是我还是要写一些自己的学习感受,但是我可以负责任的说:每个人都有他的观点和经验,程序员必须博采众长,才能。。。(作个推广^_^)

  上文提到routing不是很灵活的原由是因为我们这个项目有很多的controller和action ,要想追求路径友好,我们就得写很多路由规则,根据以前路径重写的习惯,我们希望能通过强大的正则定义来归并路由表,简化路由表,维护及性能也会有所有提升。但是当我来整理和归并路由表时遇到了麻烦,大大超出我的预期:它不是百分百的支持正则机制!

  解决办法是有两个:写一堆路由表和修改或增强system.web.routing。我们选择了前者!

  但是前段时间开始对项目的性能进行优化,就又将system.web.mvc及routing的源码研究了一番,就像读书,每次读都有不同的感受,这次我更加深该的认识到了它的设计理念——设计模式和扩展性,同时也认识到了它的一些细节直接会导致损失一些性能,特别是当我能过reflector反编译到system.web.routing.dll源码并认真的学习理解的过程中收获非常多(有很多知识点是以前没有见过的),但是它有n个类,一个请求进来转了九曲十八湾,我跟得眼都花了(水平有限),进行路由选择的实现细节(代码)和算法才搞清楚。搞清楚后我立即有一个想法:我要自己实现它。理由很简单:它的代码链条太亢长,实现过程太繁琐,性能当然不会高到哪去。于是我对它进行了大刀阔斧的修改。

  项目文件结构如下:


类结构如下: 

 

  比原来的精减了很多,以上的文件列表中我们只是写了route.cs其它的文件全是system.web.routing的源码,与原system.web.routing 应用方式和接口百分百兼容。我的处理包括三个方法:初始化路由表PreParseRoute,路由选择GetRouteData,url输出GetVirtualPath。完整代码如下,朋友们发现问题或更好的实现请告诉我:

route.cs

  下一篇将写一下system.web.mvc的性能问题及我们的修改(由于现在我们还在测试它的稳定性,下篇文章会附上源码)。

 

posted @   一挥  阅读(3165)  评论(15编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 单线程的Redis速度为什么快?
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
点击右上角即可分享
微信分享提示