CLR与.NET基类库
dz45693
我是一个软件开发人员,有较强的责任心,是一个典型的技术爱好者。在此希望能认识更多好朋友。
展开
-
探索CLR原理系列(3):方法元数据和IL(适合老鸟,新人勿沉迷其中)
前一篇我们探索了类型的第一种成员:字段。字段在IL编译时,会生成MdToken和偏移量,因为对于类型来说,一个类型在编译时就已经确定了字段的个数,所以偏移量对于编译器来说是已知的,字段和偏移量分别由元数据表(Field和ClassLayout)来记录。本篇我们来讨论类型中的另一种成员:方法.在本系列的第一篇探索CLR原理系列(1):类型 中我们说到类型中只有两种成员:字段和方法.字段是用来转载 2011-11-03 13:46:48 · 3145 阅读 · 0 评论 -
C#中int和System.Int32理解总结
最近园里的TeamOne写了一篇《[C#] int与System.Int32有什么区别》,发现里面有不少精彩的评论,所以忍不住想这篇文章总结一下:>本文的主要参考资料:1.《理解C#中的System.Int32和int:并非鸡和鸡蛋》@Author:Dixin2.《[C#] int与System.Int32有什么区别》@Author:TeamOne一.问题的来源 MS转载 2011-12-29 09:37:53 · 3449 阅读 · 0 评论 -
再探.NET的PE文件结构(安全篇)
一、开篇 首先写在前面,这篇文章源于个人的研究和探索,由于.NET有自己的反射机制,可以清楚的将源码反射出来,这样你的软件就很容易被破解,当然这篇文章不会说怎么样保护你的软件不被破解,相反是借用一个软件来讲述是怎么被攻破的,也会有人说这是一篇破文,我其实这篇文章已经写了很长时间了,不知道以什么形式发出来,因为毕竟是有些破解类的东西。但是我觉得从这篇文章相反的是能够带来一些启发。大家应该都知道转载 2014-11-10 21:20:36 · 2581 阅读 · 0 评论 -
优化反射性能的总结(中)
阅读目录开始问题回顾能不能不使用委托?CodeDOM:在运行时编译代码如何调用编译结果回到顶部问题回顾在上篇博客中,我介绍了优化反射的第一个步骤:用委托调用代替直接反射调用。然而,那只是反射优化过程的开始,因为新的问题出现了:如何保存大量的委托?如果我们将委托保存在字典集合中,会发现这种设计会浪费较多的执行时间,因为这种设计会引发三个新问题:1.转载 2016-10-21 17:59:20 · 2248 阅读 · 0 评论 -
优化反射性能的总结(下)
阅读目录开始用Delegate优化反射的缺点用Delegate优化反射的优点用CodeDOM优化反射的优点如何用好CodeDOM?用CodeDOM优化反射的缺点能不能不使用委托?根据反射密集程度选择优化方法CodeDOM优化的误区反射优化的总结在前二篇博客中,我分别介绍了二种优化反射的方法:1. Delegate:委托。2. CodeDOM:动态代码生成。这是二转载 2016-10-21 18:00:10 · 1771 阅读 · 0 评论 -
优化反射性能的总结(上)
阅读目录开始用Emit方法优化反射Delegate.CreateDelegate也能创建委托用Delegate.CreateDelegate优化反射完整的属性优化方案委托方案的后续问题缓存的线程并发问题小结反射是一种很重要的技术,然而它与直接调用相比性能要慢很多,因此如何优化反射性能也就成为一个不得不面对的问题。 目前最常见的优化反射性能的方法就是采用委托:用委托的方式调用转载 2016-10-21 17:58:34 · 1747 阅读 · 0 评论 -
DynamicMethod:更接近IL
周末尝试着学习emit进行高级编程。想起若干天前收藏的Herbrandson在codeproject上的神作(此文技术含量其实一般,实际上他讲的就是用DynamicMethod和ILGenerator实现快速实体创建的方法,但是文笔睿智,用词精致,非常诱人),重温了一下原文,又参考了msdn和园子里几位高手的博客,整理一下自己的学习笔记,希望对您有用。一、常见的将DataReader转换为转载 2016-10-22 08:49:03 · 2330 阅读 · 0 评论 -
Windbg程序调试系列1-常用命令说明&Mex扩展使用总结
Windbg程序调试是.Net高级开发需要掌握的必备技能,分析内存泄露、分析高CPU、分析线程阻塞、分析内存对象、分析线程堆栈、Live Dedugging。这个领域可以说一个技能+场景化应用的结合,如果单学Windbg命令,不理解实际Troubleshooting中的作用,是没有意义的。工欲善其事必先利其器,我们先从常用的命令和示例说起。1. 先准备一个Dump文件,建议使用64位应用程...转载 2018-10-30 12:32:41 · 2786 阅读 · 0 评论 -
Windbg程序调试系列2-内存泄露问题
文章大纲:描述问题背景和现象 确定问题是否是内存泄露 梳理问题分析思路 动手分析解决 总结1. 先说问题背景:生产环境IIS站点,运行一段时间后,w3wp进程内存会涨到2G,同时内存不释放。2. 问题确认打开性能计数器,我们重点看一段时间内,IIS站点w3wp进程相关的性能计数器的变化:性能计数器中:有三个非常重要:.NET CLR Memory/Gen 2 ...转载 2018-11-02 12:10:53 · 1915 阅读 · 0 评论 -
SOS.dll(SOS 调试扩展)
SOS 调试扩展 (SOS.dll) 通过提供有关内部公共语言运行时 (CLR) 环境的信息,帮助您在 WinDbg.exe 调试器和 Visual Studio 中调试托管程序。 此工具需要您启用项目的非托管调试。还可以将 SOS 调试扩展用于 Windows 调试器 (WinDbg.exe)。安装 Visual Studio 和 Windows SDK 时会自动安装此工具。 要运行工具转载 2011-11-21 17:38:28 · 3761 阅读 · 0 评论 -
NET框架开发平台的体系架构概览(FCL,CTS,CLS)
(一)FCL(.NETFrameworkClassLibrary):.NET框架类库FCL包含了数以千计的类型,这些类型按照其功能用命名空间(Namespace)来组织。.NET的各种语言只是定义了一些规则,而我们在实际中的运用,则要在很大程度上去调用FCL中的类型。正是这些类型,使得我们可以运用更少的语言知识,来创建丰富的程序。CLR和FCL支持我们可以开发以下转载 2009-11-27 23:57:00 · 3540 阅读 · 0 评论 -
怎样在C#里面运用 Win32和其余库
C# 用户经常提出两个问题:“我为什么要另外编写代码来使用内置于 Windows 中的功能?在框架中为什么没有相应的内容可以为我完成这一任务?”当框架小组构建他们的 .NET 部分时,他们评估了为使 .NET 程序员可以使用 Win32 而需要完成的工作,结果发现 Win32 API 集非常庞大。他们没有足够的资源为所有 Win32 API 编写托管接口、加以测试并编写文档,因此只能优转载 2009-12-11 20:18:00 · 2535 阅读 · 0 评论 -
MSBuild 简解
MSBuild 简解 从最原始的编译器,逐渐到 Shell 命令组合、Make工具,到现在的针对性 Build 工具,Rake、Ant、MSBuild,甚至于 PowerShell 这样的工具;都为我们软件开发以及系统管理做出了贡献,我甚至不能想象几十年前使用编译器生成转载 2011-09-06 10:32:59 · 3200 阅读 · 0 评论 -
探索CLR原理系列(2):字段在内存中的布局
上一篇文章我们探索了类型,每一个类型在元数据的Typedef表中,会分配一个MdToken(类型标记),当你写的方法需要访问这个类型时,也是使用MdToken到相关Dll的元数据表去加载它到Load Heap,LoadHeap是用来存放类型的空间,它并不保存类型的实例.我们可转载 2011-10-10 13:31:27 · 3123 阅读 · 0 评论 -
探索CLR原理系列(1):类型
CLR是整个Dotnet的灵魂,CIL则是这个灵魂可以发挥其跨越平台,穿越语言,跳跃....的保证.其实有很多书籍和文章都介绍了什么是CLR,什么是CIL,CTS,CLS这样的一大堆概念,可是他们具体的表现形式,以及运作的原理是大部分人都想知道的秘密,却没有什么太好的途径来获取这转载 2011-10-10 13:30:29 · 3042 阅读 · 0 评论 -
Windbg程序调试系列3-线程阻塞问题
本篇我们继续跟大家分享,如何分析解决线程阻塞问题。从根本上讲,线程阻塞属于程序Hang的一种,其表现主要有:1. 随着请求的增加,线程数一直增加,可能会把线程池打爆2. 低CPU使用率(被阻塞后的CPU使用率降低)3. 请求没有返回,客户端一直在等待,直至Timeout。 那么,从线程状态上看,什么是阻塞? 一个线程经历的5个状态,创建,就绪,运行,阻塞,终止。各个状态的转换条...转载 2018-11-02 12:15:27 · 1980 阅读 · 0 评论