代码改变世界

随笔分类 - 架构|设计|优化相关

面向.Net程序员的后端性能优化实战

2015-02-03 18:17 by 熬夜的虫子, 4758 阅读, 收藏, 编辑
摘要:最近2个月没做什么新项目 完全是对于旧的系统进行性能优化 避免超时 死锁 数据处理能力不够等常见的性能问题这里不从架构方面出发 毕竟动大手脚成本比较高 那么我们以实例为前提 从细节开始优化角度一.业务逻辑优化二.DB优化三.数据处理优化四.锁与性能五.cpu飙高小结六.crash现象分析业务逻辑优化... 阅读全文

【C#|.NET】从细节出发(一) 通用接口 aop dto 相关

2013-03-25 16:14 by 熬夜的虫子, 4088 阅读, 收藏, 编辑
摘要:系列文章完成后 源码发布在我的GIT上 https://github.com/dubing/文章仅代表个人观点 旨在交流 欢迎讨论背景 随着信息化的普及,信息系统越来越多,通常不同系统是采用不同的技术基于不同平台开发的,缺乏统一规划、统一数据标准、统一调用接口,因此系统之间的交互变得很困难.通常大... 阅读全文

CUDA并行计算框架(三)应用前景。相比价微软的并行计算框架

2011-10-10 11:26 by 熬夜的虫子, 1026 阅读, 收藏, 编辑
摘要:关于微软.net4.0推出的并行计算框架 还没深入了解有兴趣的同学可以参考下http://bitfan.blog.51cto.com/907048/200199系列博文不过发表下个人的观点 微软.NET 4.0中引入的并行扩展(包括任务并行库TPL和PLINQ)开发技术基于cpu。从应用领域上来说CPU擅长处理不规则数据结构以及递归算法、分支密集型代码和单线程程序。这类程序任务拥有复杂的指令调度、循环、分支、逻辑判断以及执行等步骤。例如,操作系统、文字处理等,而GPU擅于处理规则数据结构。例如,光影处理,游戏显像等。从微架构上看,CPU和GPU看起来完全不是按照相同的设计思路设计的,当代CPU 阅读全文

CUDA并行计算框架(二)实例相关。

2011-10-10 11:25 by 熬夜的虫子, 11483 阅读, 收藏, 编辑
摘要:从这部分开始 结合虫子的demo程序给大家分析下cuda的性能与可行性。一。先概述下实现流程。 CUDA在执行的时候是让host里面的一个一个的kernel按照线程网格(Grid)的概念在显卡硬件(GPU)上执行。每一个线程网格又可以包含多个线程块(block),每一个线程块中又可以包含多个线程(thread)。每一个kernel交给每一个Grid来完成。当要执行这些任务的时候,每一个Grid又把任务分成一部分一部分的block,block再分线程来完成。每个Grid中的任务是一定的。二维线程块的索引关系为如下:unsigned int xIndex = blockDim.x * block. 阅读全文

CUDA并行计算框架(一)概念相关、内容比较抽象。

2011-10-10 11:21 by 熬夜的虫子, 2366 阅读, 收藏, 编辑
摘要:一. 概念。1. 相关关键字。CUDA(Compute Unified Device Architecture)。GPU英文全称Graphic Processing Unit,中文翻译为“图形处理器”。2. CUDA是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题。它包含了CUDA指令集架构(ISA)以及GPU内部的并行计算引擎。。3. 从CUDA体系结构的组成来说,包含了三个部分:开发库、运行期环境和驱动。开发库是基于CUDA技术所提供的应用开发库。运行期环境提供了应用开发接口和运行期组件,包括基本数据类型的定义和各类计算、类型转换、内存管理、设备访问和执行调 阅读全文

结合项目实例 回顾传统设计模式(十一)代理模式

2011-10-07 17:58 by 熬夜的虫子, 459 阅读, 收藏, 编辑
摘要:所谓的代理,就是代表某个真实的对象。在这个设计模式中,代理可以假装自己是远程对象,但其实只是一个中间角色。客户对象所作的就像是在做远程方法调用,但其实只是调用本地资源中得“代理”对象上得方法,再由代理处理所有网络通信的底层细节。其实其实项目实例神马的 根本就没必要了 看一下Web Service的调用方式大家也许就明白了,它会在客户端生成一个代理类 - - 已经很完美的诠释了代理模式这个概念 虫子放下水 直接拿以前监控项目中客户端采集的代理方法了 --_____--服务器端 [WebMethod]publicvoidMem_handleforM(stringvalue,intmonitorid 阅读全文

结合项目实例 回顾传统设计模式(十)状态模式

2011-10-07 09:34 by 熬夜的虫子, 512 阅读, 收藏, 编辑
摘要:谈到状态模式我们在这里所谈论的是一个通用的技巧:如何对对象内的状态建模----通过创建一个实例变量来持有状态值,并在方法内书写条件代码来处理不同状态。我们要把一个状态的所有行为放在一个类中。这么一来我们将行为局部化了,并使得事情更容易改变和理解。虫子还是拿订单系统来说事了///<summary>///状态接口///</summary>publicinterfaceSimpleState{//检查购物车voidCheckCart();//检查账号voidCheckAcount();//提交订单voidOrderSumbit();}publicclassOrder{//初始 阅读全文

结合项目实例 回顾传统设计模式(九)迭代器模式

2011-10-06 23:17 by 熬夜的虫子, 399 阅读, 收藏, 编辑
摘要:关于迭代器模式,我们所需要知道的第一件事情就是它依赖于一个名为迭代器的接口。一旦我们有了这个接口,就可以为各种那个对象集合实现迭代器:数组、列表、散列表。项目实例我们就拿用户角色模块来举例背景1.某用户作为应用管理员获取一组关于管理角色的arraylist权限组2.该用户作为应用开发者获取一组关于开发角色的数组形式的权限组...///<summary>///迭代器接口///</summary>publicinterfaceRoleIterator{//返回一个布尔值,让客户知道是否还有更多的元素boolhasnext();//返回下一个元素Objectnext();}/ 阅读全文

结合项目实例 回顾传统设计模式(八)模板方法模式

2011-10-06 15:32 by 熬夜的虫子, 482 阅读, 收藏, 编辑
摘要:模板方法定义了一个算法的步骤,并允许子类为一个或多个步骤提供实现。普通的设计算法由实现类直接控制,在很多功能类似的对象中存在重复。并且由于类的组织方式不具有弹性,所以往往新加入新的相似模块时需要作大量冗余的步骤。我们还是那电商的订单提交来说事 ~ ~///<summary>///模板类///</summary>publicabstractclassOrderSubmit{publicOrderSubmit(){//检查购物车CheckCart();//检查支付方式CheckPaytype();//检查用户地址CheckAddress();//提交订单SubmitOrde 阅读全文

结合项目实例 回顾传统设计模式(七)适配器模式(附外观模式)

2011-10-06 09:38 by 熬夜的虫子, 585 阅读, 收藏, 编辑
摘要:记得以前章节谈过的装饰者模式,我们将对象包装起来,赋予他们新的职责。而现在则是以不同目的,包装某些对象:让他们的接口看起来不像自己而像是别的东西。这样就可以在设计中,将类的接口转换成想要的接口,以便实现不同的接口。在项目中,适配器模式一般扮演者协调者的作用。1.客户通过目标接口调用适配器的方法对适配器发出请求2.适配器使用被适配者接口把请求转换成被适配者的一个或多个调用接口3.客户接受到调用的结果,但并未察觉这一切是适配器在起转换作用另外还有一种特殊情况,万一系统新旧并存,旧的部分期望旧的厂商接口,但我们却已经使用新厂商的接口编写了这一部分,这个时候该怎么办?这里使用适配器,那里却使用未包装的 阅读全文

结合项目实例 回顾传统设计模式(六)命令模式

2011-10-05 14:56 by 熬夜的虫子, 450 阅读, 收藏, 编辑
摘要:命令模式将请求封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。用户程序在使用的时候,只与该命令对象打交道,而不用与一类对象打交道,降低了耦合性,提高了程序设计的灵活性。我们还是那数据库操作为例publicclassDBInstance{publicvoidExecuteNonQuery(){}publicvoidExecuteDataset(){}}publicclassSqlInstance:DBInstance{publicvoidExecuteNonQuery(){Console.WriteLine("thisisaSqlInstanc 阅读全文

结合项目实例 回顾传统设计模式(五)单例模式

2011-10-04 14:05 by 熬夜的虫子, 432 阅读, 收藏, 编辑
摘要:这个...... 大家应该熟的不能再熟了 虫子就不班门弄斧了 privatestaticobjectLockKey=newobject();privatestaticT_Instance;publicstaticTGetInstance(){returnGetInstance(null);}publicstaticTGetInstance(Func<T>onCreateInstance){if(_Instance==null){lock(LockKey){if(_Instance==null){try{if(onCreateInstance==null)_Instance=newT 阅读全文

结合项目实例 回顾传统设计模式(四)工厂模式(简单工厂、普通工厂、抽象工厂)

2011-10-04 13:19 by 熬夜的虫子, 729 阅读, 收藏, 编辑
摘要:关于工厂模式和单例模式 大部分项目这2种模式都很常见例如在orm框架中 工厂模式常用来封装数据库的创建 我们分3种case来看 简单工厂模式 普通工厂模式 抽象工厂模式抽象一点的说 工厂模式提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。直接看实例一般惯性思维 我们遇到分支判断时会这样publicclassNormalCase{privateDBInstancedbInstance;publicNormalCase(stringtype){if(type.Equals("SQL")){dbInstance=newSqlInstance();}elseif 阅读全文

结合项目实例 回顾传统设计模式(三)装饰者模式

2011-10-02 15:09 by 熬夜的虫子, 610 阅读, 收藏, 编辑
摘要:说到这个模式的项目实例 虫子也满头疼的 所谓装饰者模式说白了动态将职责附加到对象上。如果你在项目某个场景中需要功能扩展根据基类衍生出非常多的子类,那么装饰者模式无疑是很好的。不过其实在实际的项目中,往往大家不直接衍生子类,而是通过组合的方式,根据逻辑讲各种扩展叠加来,对外公布的只是一个标签一个壳而已。所以这个章节,虫子就虚构一个实例了。还拿电商来说、点券赠品系统。背景:1.所有点券、优惠券、赠品券、积分继承同一个基类 基类券2.不用种类的券可以混合搭配 3.积分根据不同的场景可以配置不同的规则4.升级礼券在上层礼券基础上添加一般情况下 大家可以就这样设计了///<summary>/ 阅读全文

结合项目实例 回顾传统设计模式(二)观察者模式

2011-10-02 13:43 by 熬夜的虫子, 594 阅读, 收藏, 编辑
摘要:观察者模式现在用的不是很多重点看下它的设计思想OK 下面继续消息中心的那点事///<summary>///数据中心///</summary>publicclassMessageData{publicvoidmessageSend(){stringtitle=observer.getTitle();stringcontent=observer.getContent();//针对具体实现编程,会导致我们以后再增加或者删除消息平台时必须要重新维护Platformlist有时甚至还要重构代码foreach(Platformpinobserver.Platformlist){p. 阅读全文

结合项目实例 回顾传统设计模式(一)策略模式

2011-09-09 10:21 by 熬夜的虫子, 1049 阅读, 收藏, 编辑
摘要:虫子以前在一家电商公司 会员的模块在这里分类很明确 不同的会员所具有的权限和行为不同,大多程序员会使用标准的oo技术,设计一个会员超类SuperUser,并让各种商家会员继承此超类到这里无可厚非,但是在下面个过程中你可以就慢慢体会策略模式与你在代码里不停写逻辑判断所带来的区别有多大所有的会员都具有下列行为购物,评价,发布商品View Code publicabstractclassSuperUser{publicSuperUser(){}publicvoidshopping(){Console.WriteLine("shopping");}publicvoidComment 阅读全文

关于领域驱动设计与面向数据库设计

2011-09-07 17:44 by 熬夜的虫子, 1467 阅读, 收藏, 编辑
摘要:╮(╯▽╰)╭ 开发时间越长越觉得自己的知识储备不够 本篇文章只代表虫子个人观点 欢迎大牛们吐槽首先,虫子不会说哪一种更优秀,而是说对于新给的需求适合哪种设计。更贴切的一点,对于一个大型的系统应用应该兼容2种设计思想。分2个阶段,首先在需求确认阶段利用领域驱动建模,细化模块、角色、关系、行为以及资源等。建模不需要太彻底。然后、分块完毕后在概要设计阶段可以再切换设计思路,模块化的应用按照面向数据库的设计思想,这样在2个阶段都利用了2种设计思想的长度。最大程度的提高系统的价值。下面来介绍下2种设计1.先来扯扯领域驱动设计 借鉴下一些大牛的经验http://www.cnblogs.com/tsouk 阅读全文

打造属于自己的设计模式

2011-09-05 12:05 by 熬夜的虫子, 920 阅读, 收藏, 编辑
摘要:设计模式 一般初级、中级、高级程序员都喜欢挂在嘴边的词。想必大家身边也有不少关于设计模式的书。设计模式是程序员的老前辈们根据自己的项目经验积累起来的解决方案集。所以,没必要把设计模式看成是硬性的东西,别人的经验参考一下即可,了解设计思路,为什么这种场景要用这种模式。也许是老一辈的程序员们确实比现在的程序员要强很多,毕竟现在网上很难找到自己摸索的设计模式了。虫子不才就先抛砖引玉了。简单介绍2个我项目中经常用到的模式1.机器人插件模式何所谓机器人插件,可以这样理解。你有一个机器人,但是需要这个机器人干什么并不确定。插入不同的卡片可以让机器人做出不同的行为。原理和aop类似,aop是站在系统级的角度 阅读全文

分布式文件系统应用(下篇 实践)

2011-08-31 16:29 by 熬夜的虫子, 606 阅读, 收藏, 编辑
摘要:题外话不多说 直接整起 先简单演示 单台storage+tracker先介绍下虫子的环境 windosXP主机(~~o(>_<)o ~~ 虫子也不想的) ubuntu虚拟机fastdfs安装目录在root用户下根目录启动tracker服务 /usr/local/bin/fdfs_trackerd /FastDFS/conf/tracker.conf启动storage服务/usr/local/bin/fdfs_storaged /FastDFS/conf/storage.conf添加监控 看是否启动成功测试上传根据服务端的通信协议设计.net客户端test:获得上传路径 获得上传路径 阅读全文

分布式文件系统应用(上篇 理论)

2011-07-10 13:17 by 熬夜的虫子, 610 阅读, 收藏, 编辑
摘要:自从6月份出山以来 就一直琢磨着搞一套通用的服务化平台。在设计用户行为分析以及用户推广的时候,发现自己的构架里对海量文件的存储没有一个合理的方案。起初打算用windows2003中dfs系统开发一套新的文件系统,后来发现win下的dfs是个大坑,未遂。然后考虑到win平台与linux系统之间关于文件处理的优劣与稳定性,最终选择linux下fastdfs。下面先简单介绍下分布式文件系统然后结合我的实际case给大家图文演示,在这之前先感谢下fishman、咕咚、以及菲雪同学的大力支持。你们是最棒的!!Tracker Server:跟踪服务器,主要做调度工作,在访问上起负载均衡的作用。在内存中记录 阅读全文