动态语言并非C#所长
发布于:2018-02-01 17:31  浏览:

我觉得,这些奇淫技巧在小项目中练练手可以,在团队合作中能不用尽量不用,以后维护会非常困难。

更何况,C#做为一种立足稳健性的语言,动态语言并非C#所长,其动态语言性能上也不及传统的脚本语言。

或者说,微软为什么不换种思路,将javascript 的.net版本维护好,并把其与其他语言的融合能力做好(一个项目中自由的放置多种语言),这样也许会更容易些。动态语言主要还是在高级应用的多,高级应用的智能提示就可有可无了
动态语言最大的好处就是,在复杂条件下,方便应用
Clay的实现是否有问题..对动态属性进行读写比ExpandoObject 慢了100倍....
而ExpandoObject 跟Dictionary<string, object> 是相近的..
比直接定义对象属性访问慢20倍左右..
是的,Clay 效率不高。
Clay 主要用于特定场合下创建复杂层次结构的对象,不大会用于批量创建,大概因为这个原因,作者没有考虑效率的问题吧。
如果对效率有要求,可以通过实现 IDynamicMetaObjectProvider 接口来创建自己的动态类型。
对于IO密集型的应用(比如数据库访问,磁盘访问,网络访问)来讲,是不需要分配一个线程的(不怎么准确,但可以这么理解),那么使用一个后台线程运行这些操作来实现异步是低效的。而实际上我们的应用中充斥着大量的IO密集型操作(除了那些做游戏应用计算密集型)。一般我们可以将我们的应用分为计算密集型,比如进行图像处理,解方程等,另一种就是IO密集型,比如访问数据库,访问磁盘等。
分清楚这两种了后我们再往下看。
计算密集型的代码是大量占用CPU时间,所以你用ThreadPool.QueueUserWorkItem也好,用BeginInvoke也好,都是分配一个线程来运算,无所谓(ThreadPool更佳)
IO密集型计算,我们大部分时间是在等待IO操作的,CPU并没有花多少时间来运算。所以我们不需要分配一个线程来单独进行IO,我们只需要使用异步发起IO操作,然后CPU自己干自己的事儿,当IO完成后,会回调。这样的效率就会更高。