C# 进阶
C# 高级语法进阶
衣舞晨风
不预测,只应对
展开
-
为什么 .NET 的反射这么慢?
大家都知道.NET的反射很慢,但是为什么会出现这种情况呢?这篇文章会带你寻找这个问题的真正原因。CLR 类型系统的设计目标原因之一是,在设计的时候反射本身就不是以高性能为目标的,可以参考Type System Overview - ‘Design Goals and Non-goals’(类型系统概览 - ‘设计目标和非目标’):目标 运行时通过快速执行(非反射)代码访问需...转载 2016-12-26 21:34:11 · 4477 阅读 · 1 评论 -
C# 使用绑定句柄来减少进程的内存耗用
许多应用程序中,绑定了一组类型(Type)或者类型成员(从MemberInfo派生),并将这些对象保存在某种形式的一个集合中。以后,会搜索这个集合,查找特定的对象,然后调用这个对象。这是一个很好的机制,但是有个小问题:Type和MemberInfo派生的对象需要大量的内存。如果一个应用程序容纳了太多这样的类,但只是偶尔用一下它们,应用程序的内存就会急剧增长,对应用程序的性能产生影响。在内部,C原创 2016-12-25 10:03:48 · 2662 阅读 · 1 评论 -
C# 性能优化最佳实践
1、使用泛型来避免装箱、拆箱操作。 装箱操作会造成GC压力;如果发生在集合中,应该使用泛型集合避免。 对于值类型的集合,使用List来代替ArrayList,使用Dictionary来代替Hashtable。ArrayList h=new ArrayList(); //不建议h.Add(1);List h = new List(); //不建议原创 2014-01-22 16:02:49 · 5509 阅读 · 0 评论 -
C# 多线程参数传递
1、通过实体类来传递(可以传递多个参数与获取返回值),demo如下:需要在线程中调用的函数:namespace ThreadParameterDemo{ public class FunctionClass { public static string TestFunction(string name, int age) {原创 2015-05-23 15:42:10 · 6628 阅读 · 1 评论 -
C# 异常处理(Catch Throw)IL分析
1、catch的几种形式及性能影响: private void Form1_Click(object sender, EventArgs e) { try { } catch { throw; }原创 2015-10-28 08:24:56 · 6242 阅读 · 9 评论 -
C# 内存管理
Windows使用一个系统:虚拟寻址系统,该系统把程序可用的内存地址映射到硬件内存中的实际地址上,这些任务完全由Windows在后台管理。其实际结果是”位处理器上的每个进程都可以使用4GB的内存ˉ—无论计算机上实际有多少硬盘空间(在“位处理器上,这个数字会购。这个4GB的内存实际上包含了程序的所有部分,包括可执行代码、加载的所有D⒒,以及程序运行时使用的所有变量的内容。这个4GB的内存称为虚拟地址原创 2015-07-24 18:31:22 · 1517 阅读 · 7 评论 -
通过IL分析C#中的委托、事件、Func、Action、Predicate之间的区别与联系
一直以来都是对于事件与委托比较混淆,而且不太会用。找了个时间,总结了一下,感觉清晰了很多。先说一下个人理解的结论吧: delegate是C#中的一种类型,它实际上是一个能够持有对某个方法的引用的类。 delegate声明的变量与delegate声明的事件,并没有本质的区别,事件是在delegate声明变量的基础上包装而成的,类似于变量与属性的关系(在IL代码中可以看到每一个原创 2015-05-04 12:32:59 · 12264 阅读 · 1 评论 -
C# 单例模式的五种写法
C# 单例模式的五种写法及优劣分析,见下文: 单例模式及常见写法原创 2015-12-15 21:27:37 · 11814 阅读 · 1 评论 -
C# 反射详解
原创 2016-02-28 10:04:17 · 10956 阅读 · 6 评论