摘要:
在最近的公司框架开发中,利用了网上某大牛的反射缓存库作为辅助。在测试的时候发现出现了巨大的内存泄露,在频繁的操作后,内存不断的产生巨大的开销,10多分钟就占有了5,6m的内存。解决问题的时,公司不能上网,没有内存分析工具,没有我钟爱的ANTS Memory Profiler帮助下,我们只能靠简单的内存输出来二分查找缩小范围,利用System.Diagnostics命名空间下的Process的WorkingSet64属性来统计两次输出的内存增长量(WorkingSet64:描述关联的进程分配的物理内存量(以字节为单位))。花了半天终于定位到了第三方的缓存块,一看吓一跳居然缓存了2,3万的对象。. 阅读全文
随笔档案-2011年12月
AOP之PostSharp7-解决IOC 不能直接new问题,简化IOC开发和IOC对象LazyLoad
2011-12-18 21:50 by 破狼, 2940 阅读, 收藏, 编辑
摘要:
经过几节的postsharp基础和每节的一个应用实例,已经基本PostSharp应用的能力,PostSharp主要是简化我们的开发,让编译器时候给我注入重复疲劳代码。 在今天我们的demo是,关于ioc(控制反转)的问题,ioc框架我们都会从ioc容器中取得我们的ioc对象注入,所以我们不能直接new对象得到我们的实例,必须Resolve。我一直都是很懒得人,既然有了PostSharp就的好好利用起来。大部份ioc逻辑是从以前的一篇利用Attribute简化Unity框架IOC注入转过来的,注入支持自定义配置文件,我个人不喜欢把配置信息全部写在一个web.config/app.config.. 阅读全文
AOP之PostSharp6-EventInterceptionAspect(事件异步调用)
2011-12-13 19:50 by 破狼, 2249 阅读, 收藏, 编辑
摘要:
在上几章我们讨论了方法属性字段的aspect,现在我们再来看看事件机制的aspect。和字段,属性location一样,在c#中字段也可以转化为方法名为add,remove的方法处理,所以对于事件的aspect,同样类似于我们的方法。我们先看看EventInterceptionAspect的定义: aspect类包含我们对于事件aspect所必要的注册,取消,调用的注入。其参数定义如下: 为我们提供了,ProceedAddHandler,ProceedInvokeHandler,ProceedRemoveHandler的事件处理代理。同样包含来自AdviceArgs的Instance对象。 . 阅读全文
AOP之PostSharp5-LocationInterceptionAspect
2011-12-11 14:50 by 破狼, 2237 阅读, 收藏, 编辑
摘要:
这节我们要讨论的是PostSharp的LocationInterceptionAspect,PostSharp官方把Property和Field成为Location。所以LocationInterceptionAspect就是为了实现Property和Field的拦截。在我们前面讨论了关于方法OnMethodBoundaryAspect的aspect,我们很容易想到,在c#中Property就是一个编译时分为Get和Set两个方法,对于property的aspect就类似于了我们的Method的aspect。而对于Field的aspect同样可以转换为对Property的aspect。下面我. 阅读全文
AOP之PostSharp4-实现类INotifyPropertyChanged植入
2011-12-10 20:58 by 破狼, 2707 阅读, 收藏, 编辑
摘要:
在前面几篇PostSharp的随笔,今天来一个简单的demo。PostSharp的其他内容将会在后面继续更新。 如果我们了解wpf或者silverlight开发中的MVVM模式,就知道框架要求我们的ViewModel必须实现INotifyPropertyChanged,来得到属性改变的事件通知,更新UI。实现INotifyPropertyChanged接口很简单,而且一沉不变,属于重复劳动。在这里我们将看看如何运用PostSharp来解决我们的重复劳动。当然这里只是一个demo演示,具体在项目开发中你直接实现INotifyPropertyChanged,或者AOP植入,这取决我个人和团队文化. 阅读全文
AOP之PostSharp3-MethodInterceptionAspect
2011-12-04 23:46 by 破狼, 3160 阅读, 收藏, 编辑
摘要:
在上两篇我们介绍了OnExceptionAspect和OnMethodBoundaryAspect ,在这节我们将继续了解MethodInterceptionAspect,他为我们提供了关于方法处理的AOP切入,不同于OnMethodBoundaryAspect,他不是边界,是方法体。有了我们可以在我们的方法切入aspect很多有用的信息,比如将同步方法变为异步,防止多次点击重复提交,winform,wpf的多线程调用UI(参见PostSharp - Thread Dispatching(GUI多线程)),长时间操作在超过用户接受时间弹出进度条等等有用的关于用户体验和业务逻辑功能,简化我们的. 阅读全文
AOP之PostSharp2-OnMethodBoundaryAspect
2011-12-04 19:03 by 破狼, 4572 阅读, 收藏, 编辑
摘要:
在上一篇中我们了解了简单的OnExceptionAspectAOP面向方向切入,在第一节中我们将继续我们的PostSharp AOP系列的OnMethodBoundaryAspect方法行为的切入,这也是我们常用的AOP切入。 OnMethodBoundaryAspect顾名思义其为对方法边界的切入,定义如下:在这里提供了四个方法边界点为我们切入。我们可以很轻松的对方法权限,执行时间,参数合法性等aspect。aspect传入参数MethodExecutionArgs给我如下信息,同时还包括父类AdviceArgs的Instance属性,实例方法才有值,静态方法则为null,这里还需要说一下. 阅读全文
AOP之PostSharp初见-OnExceptionAspect
2011-12-04 01:35 by 破狼, 6232 阅读, 收藏, 编辑
摘要:
PostSharp 这个静态植入的aop框架我就不多说了,在以前的aop文件,我们也尝试用MSBuild+Mono.Cicel理解静态植入AOP的原理。最近公司准备购买Postsharp做一些AOP,减少开发是代码量,至于选择AOP相信也不用多说。我也在今天重新了解了些Postsharp最新版更新,这阵子的博客更新也少了,所以准备在MSBuild+Mono.Cicel的基础上再一些Postsharp系列。今天既然是初见,那么我们就从最简单的OnExceptionAspect开始。一:OnExceptionAspect起定义如下: 先写Aspect Attribute:View Code [S. 阅读全文