博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

.Net Framework

摘要: 近来发现,有很多同事在设计Asp.Net Application时,选择用字符串拼Html文本而不用GridView等控件,原因居然是“Asp.Net太慢”。看来有必要再次明确一个本质问题:我们是做产品的,不是搞学术研究的;同时要强调一个习惯:要用事实去证明你的猜测,而不要臆断。 一、Remember:我们是做产品的,不是搞学术研究的 直接贴一个前阵子的一封邮件,“全在邮件里面了”: 发件人: 发送时间: 收件人: 主题: 答复: 关于WebService的性能损失 这个问题里面,缺少对用户场景的描述。 我认为,我们实际应该关心的并不是这两种方式的性能究竟差别有几倍,而是他们是否会对用户、对业务产生影响。 在这个例子里面,1500次的访问,WebService多出了5000毫秒,平均每次访问多出了3ms。那么我有以下几个问题: 1、当用户执行一次操作的时候,会调用几次Web Service,从而会多出多少毫秒? 2、多出的这些时间,是不是我们必须省下来,还是在允许接受的范围内、可以忽略不计? 3、如果用户的一次操作确阅读全文

posted @ 2008-12-11 17:13 [虫子] 阅读(3037) | 评论 (54) 编辑 |

摘要: 前几天在看《.Net框架程序设计》的时候,好像记得书中有提到说每个对象在创建后都会有一个字段保存了一个内存地址,这个内存地址指向对象实际类型的方法表,其中维护了类型每个方法的签名以及他们的入口地址的对应关系。每次调用方法的时候会到这个表中去查找方法入口地址。而根据我之前对于程序的了解,只有虚函数才会需要保存在这个“函数指针表”中,而非虚方法因为在编译时就已经知道了函数入口地址的相对偏移量(因为确切的知道将要调用的是哪个类的哪个方法),所以最终生成的cpu call指令中可以直接得到函数入口地址(模块加载时的基地址加上偏移量就是实际的入口地址)。而虚方法在编译时无法知道具体调用的是哪个方法,所以才会用这个“虚函数指针表”来使系统能够在运行时获得要调用的是哪个方法。阅读全文

posted @ 2008-04-24 01:11 [虫子] 阅读(2418) | 评论 (24) 编辑 |

摘要: 自打使用.Net以来,他给我的印象就一直是:慢。不过这几天看了一下.Net程序运行时的原理,才明白了我们平时的.Net程序是为什么慢的,也明白了在某些情况下其实.Net程序运行起来也不比非托管程序慢。阅读全文

posted @ 2008-04-17 01:35 [虫子] 阅读(6061) | 评论 (75) 编辑 |

摘要: 我们可能经常会用到 Thread.Sleep 函数来使线程挂起一段时间。那么你有没有正确的理解这个函数的用法呢?思考下面这两个问题: 1、假设现在是 2008-4-7 12:00:00.000,如果我调用一下 Thread.Sleep(1000) ,在 2008-4-7 12:00:01.000 的时候,这个线程会 不会被唤醒? 2、某人的代码中用了一句看似莫明其妙的话:Thread.Sleep(0) 。既然是 Sleep 0 毫秒,那么他跟去掉这句代码相比,有啥区别么?阅读全文

posted @ 2008-04-07 14:45 [虫子] 阅读(6267) | 评论 (73) 编辑 |

摘要: 在上一篇文章中,我们探讨了使用Thread类实现异步的方法。

在整个过程中,可以发现Delegate这个东西出现了很多次。而仔细研究Delegate,我们发现每一个Delegate类型都自动产生了Invoke、BeginInvoke、EndInvoke等方法。而BeginInvoke、EndInvoke这两个方法,我们马上就可以猜到这是用来实现异步的~~

那么我们现在就看一下怎样使用委托来实现异步。阅读全文

posted @ 2008-04-06 20:09 [虫子] 阅读(2985) | 评论 (15) 编辑 |

摘要: A Taste of AOP from Solving Problems with OOP and Design Patterns (Part III) zz阅读全文

posted @ 2008-04-06 18:10 [虫子] 阅读(145) | 评论 (0) 编辑 |

摘要: A Taste of AOP from Solving Problems with OOP and Design Patterns (Part II) zz阅读全文

posted @ 2008-04-06 18:09 [虫子] 阅读(128) | 评论 (1) 编辑 |

摘要: A Taste of AOP from Solving Problems with OOP and Design Patterns (Part I) 阅读全文

posted @ 2008-04-06 18:07 [虫子] 阅读(161) | 评论 (0) 编辑 |

摘要: 通过RealProxy是最简单的方法,缺点是不能同时加入多个代理,否则会抛异常。
实现步骤:
1、实现RealProxy的继承类
2、实现应用上述实现的RealProxy类的ProxyAttribute
3、把上述实现的Attribute应用到ContextBoundObject实例上阅读全文

posted @ 2008-04-06 18:04 [虫子] 阅读(531) | 评论 (2) 编辑 |

posted @ 2008-04-06 17:59 [虫子] 阅读(224) | 评论 (4) 编辑 |

摘要: 在写程序的过程中,我们可能会需要对某些功能实现异步操作,比如记录调用日志等。

提到异步,我们最容易想到的就是多线程:我们可以启动另外一个线程,把一部分工作交给另外一个线程去执行,而当前线程继续去做一些更加急迫的事情。这里的“把一部分工作交给另外一个线程取执行”,是通过将要执行的函数的函数入口地址告诉另外一个线程来实现的,当新的线程有了函数的入口地址,就可以调用该函数。

我们先来看一下怎样使用C#中的Thread类来实现异步。
阅读全文

posted @ 2008-04-06 17:52 [虫子] 阅读(3404) | 评论 (20) 编辑 |