随时保持理性思考的态度
2009-09-09 21:57
609 查看
你的思维模式是怎么样的,你是如何思考和解决你从未想过的问题?如何去寻找较正确靠谱的方式去处理事情呢?这篇文章将向大家分享我的方法。
先向大家问个问题:亚洲的陆地面积大概是多少?(不许搜索不许翻书,先自己估算一下,答案在文章最后)
我的回答是3500万平方公里,我是怎么作出这样的答案的呢,我不是瞎猜的。首先我学过地理,我知道中国陆地面积是960万平方公里,就大概算成是1000万平方公里吧,我印象里从地图上看,俄罗斯的亚洲部分大概比中国大一点,印度版图比中国小一点,差不多就当2个中国面积吧,这样就有了3000万平方公里,然后算上什么韩国日本越南什么东南亚一块,我就估算出了3500万平方公里的面积。
这个例子说明,我是利用我现有能掌握的各项信息,来作出判断。我面对从未处理过的事情时,都是以理性思考的态度去想解决方案。事实上,上面的题目我估算少了一些,看看亚洲地图,我忘记算上西亚了,那块富的流油又老打仗的地方。中国的西边还很大一块呢。犯下这个错误说明我初中地理没学好-_-!!
让我想到这个态度问题,主要是今天遇到个事情很郁闷,有个网站有个系统功能出现了性能问题,一个页面点了3-5分钟都还打不开,明显是有什么地方死循环了,我后来解决了。说说我是怎么处理的吧:
1、先把页面上其他的控件都删除,排除到只剩目标控件,先证明是这个控件出了问题。用事件探查器分析一下SQL,发现没有执行什么SQL语句,说明数据层是正常的,不存在循环读数据的BUG。
2、控件中的方法逐步清理掉,只留下影响性能的那几个。我要想办法计算方法执行时间,先查了一下还有用什么MethodPerfMonitor这种玩意的,我搞了一下没成功,大概web的不适用。我后来想反正是计算时间嘛,我又不要多精确,直接输出了DateTime.Now,就达到目的了,在方法开始和结束的地方输出当前时间,精确到秒,很快确定了是某个方法的问题,直到看到是某行代码的执行时间超长,是个Pages.GetList(),从底层调用的。
3、现在表现层看来查不出什么了,找出项目的源代码,继续找Pages.GetList()方法,发现里面还有几个对象的嵌套什么的,还用了缓存,我想这缓存难道是没发挥作用?打上断点调试了一下,缓存没问题,都顺利填充和取出了。
4、在底层的Pages.GetList()中找到了Subject.GetList()的方法,就是说这个方法是递归出来的,我在每个方法上用System.Diagnostics.WriteLine()输出当前DateTime,编译了执行,发现有个方法花了6秒执行,被执行了7次,就是说这一下子就可以用掉42秒的时间来读出Pages.GetList(),难怪慢了!
5、我将每一层嵌套的方法上全都输出当前时间,并且输出了毫秒,以便查出具体是哪里有很大的消耗,发现很可怕,每一个方法都只有30毫秒左右就完成了,但执行了近3000次,这种嵌套的结构想递归出来代价居然这么大!我为了读出一个顶级的对象,下面有几千个子对象从缓存中读出,我本以为从缓存中取出对象是个很轻易的事,没想到数量一大会这么大影响。
6、找到原因了:由于缓存的方式和时机不正确,将具体的对象全部都进行了缓存,而不是直接缓存对象集合,造成这么个诡异的性能问题。有了原因就很容易解决问题了,
这个事件的结论:
1、看似复杂的问题,通过层层剥离和分析,也是可以分解成细微的各种原因,从而找到改进方法。
2、使用.net缓存一定要注意周遍环境和时机,缓存要质量不要数量。
上面亚洲面积的问题答案是:4400万平方公里,看看百度百科学习一下亚洲的地理知识。
先向大家问个问题:亚洲的陆地面积大概是多少?(不许搜索不许翻书,先自己估算一下,答案在文章最后)
我的回答是3500万平方公里,我是怎么作出这样的答案的呢,我不是瞎猜的。首先我学过地理,我知道中国陆地面积是960万平方公里,就大概算成是1000万平方公里吧,我印象里从地图上看,俄罗斯的亚洲部分大概比中国大一点,印度版图比中国小一点,差不多就当2个中国面积吧,这样就有了3000万平方公里,然后算上什么韩国日本越南什么东南亚一块,我就估算出了3500万平方公里的面积。
这个例子说明,我是利用我现有能掌握的各项信息,来作出判断。我面对从未处理过的事情时,都是以理性思考的态度去想解决方案。事实上,上面的题目我估算少了一些,看看亚洲地图,我忘记算上西亚了,那块富的流油又老打仗的地方。中国的西边还很大一块呢。犯下这个错误说明我初中地理没学好-_-!!
让我想到这个态度问题,主要是今天遇到个事情很郁闷,有个网站有个系统功能出现了性能问题,一个页面点了3-5分钟都还打不开,明显是有什么地方死循环了,我后来解决了。说说我是怎么处理的吧:
1、先把页面上其他的控件都删除,排除到只剩目标控件,先证明是这个控件出了问题。用事件探查器分析一下SQL,发现没有执行什么SQL语句,说明数据层是正常的,不存在循环读数据的BUG。
2、控件中的方法逐步清理掉,只留下影响性能的那几个。我要想办法计算方法执行时间,先查了一下还有用什么MethodPerfMonitor这种玩意的,我搞了一下没成功,大概web的不适用。我后来想反正是计算时间嘛,我又不要多精确,直接输出了DateTime.Now,就达到目的了,在方法开始和结束的地方输出当前时间,精确到秒,很快确定了是某个方法的问题,直到看到是某行代码的执行时间超长,是个Pages.GetList(),从底层调用的。
3、现在表现层看来查不出什么了,找出项目的源代码,继续找Pages.GetList()方法,发现里面还有几个对象的嵌套什么的,还用了缓存,我想这缓存难道是没发挥作用?打上断点调试了一下,缓存没问题,都顺利填充和取出了。
4、在底层的Pages.GetList()中找到了Subject.GetList()的方法,就是说这个方法是递归出来的,我在每个方法上用System.Diagnostics.WriteLine()输出当前DateTime,编译了执行,发现有个方法花了6秒执行,被执行了7次,就是说这一下子就可以用掉42秒的时间来读出Pages.GetList(),难怪慢了!
5、我将每一层嵌套的方法上全都输出当前时间,并且输出了毫秒,以便查出具体是哪里有很大的消耗,发现很可怕,每一个方法都只有30毫秒左右就完成了,但执行了近3000次,这种嵌套的结构想递归出来代价居然这么大!我为了读出一个顶级的对象,下面有几千个子对象从缓存中读出,我本以为从缓存中取出对象是个很轻易的事,没想到数量一大会这么大影响。
6、找到原因了:由于缓存的方式和时机不正确,将具体的对象全部都进行了缓存,而不是直接缓存对象集合,造成这么个诡异的性能问题。有了原因就很容易解决问题了,
这个事件的结论:
1、看似复杂的问题,通过层层剥离和分析,也是可以分解成细微的各种原因,从而找到改进方法。
2、使用.net缓存一定要注意周遍环境和时机,缓存要质量不要数量。
上面亚洲面积的问题答案是:4400万平方公里,看看百度百科学习一下亚洲的地理知识。
相关文章推荐
- 请保持学习的态度和思考的态度
- 趣题:直觉 VS 理性思考 经典概率问题
- 关于80后这一代人就业的一点理性思考[转载]
- 保持合适语速和职业化态度,自如应对招聘方的电话面试
- [读后感]思考于“关于socket voip后台保持长连被苹果拒了”
- 用认真的态度面对人生用心的思考
- PHP保持SESSION问题以及由SESSION性能引发的一些思考
- 本地与服务端保持随时同步问题
- 微信小程序的理性思考
- 保持独立思考&&不要太嚣张
- SAP公司联席CEO Bill McDermott先生的至理名言:“我们要保持饥饿感和谦逊的态度。”
- 【Weex】 理性思考
- 一个人保持什么样的学习态度
- [转]关于我们这一代人就业的一点理性思考
- 保持积极的态度,态度决定一切!
- 菜鸟的自己要保持的良好学习习惯(随时更新)
- [原]保持现场数据和家里研发数据一致的思考
- 在博客园写了一年博客,收获的不仅仅是写作技能——我能一直保持积极的学习和工作态度
- 对.Net状态保持机制和并发问题的思考
- 济宁辞职市长朋友圈曾发文章:永远保持随时可以离开的能力