happyhippy

这个世界的问题在于聪明人充满疑惑,而傻子们坚信不疑。--罗素

随笔分类 - .Net Framework

1 2 下一页
判断泛型的值是否为default(T)
摘要:1: public static bool IsDefault<T>(this T value) 2: { 3: //... 4: }1. ==的问题 如果用==直接判断(default(T) == value),编译时会提示错误:Error CS0019: 运算符“==”无法应用于“T”和“T”类型的操作数 (CS0019)。2. object.Equals的问题 object提供了一个静态方... 阅读全文
posted @ 2011-06-21 23:00 Silent Void 阅读(6498) 评论(1) 推荐(0) 编辑
SpeechSynthesizer/WaveHeader 存在严重的内存泄漏
摘要: .Net Framework 3.0带了个System.Speech.dll,装个语音包,然后就可以实现文字朗读等功能。最近在使用的时候,发现随着程序的运行,程序占用的内存一直在增长,直到程序崩溃。 用WinDbg抓了个Dump,然后看了下,里面一堆没有释放的SPVTEXTFRAG、AudioDeviceOut+InItem、WAVEHDR、WaveHeader对象。。。 阅读全文
posted @ 2010-11-07 20:52 Silent Void 阅读(4368) 评论(14) 推荐(6) 编辑
Linq to Sql : 三种事务处理方式
摘要:Linq to SQL支持三种事务处理模型:显式本地事务、显式可分发事务、隐式事务。(from MSDN: 事务 (LINQ to SQL))。MSDN中描述得相对比较粗狂,下面就结合实例来对此进行阐述。 0. 测试环境 OS Windows Server 2008 Enterprise + sp1 IDE Visual Studio 2008, .net framework 3.5 + SP... 阅读全文
posted @ 2010-01-27 14:47 Silent Void 阅读(21552) 评论(5) 推荐(6) 编辑
反射实现方法调用(1):执行机制
摘要:1. 反射简介 2. 使用反射3. 反射调用方法的执行机制 1. 反射简介 程序集包含模块,而模块包含类型,类型 阅读全文
posted @ 2009-03-29 18:52 Silent Void 阅读(1918) 评论(0) 推荐(2) 编辑
CLR 完全介绍:研究内存问题(zz)
摘要:使用的工具 GC 性能计数器 Windows 性能计数器 确认托管进程中的 OOM 异常 确定导致 OOM 异常的原因 衡量托管堆的大小 如果对象保留下来会怎样? 托管堆上的碎片是否会造成问题? 衡量在垃圾收集上花费的时间 研究高 CPU 使用 阅读全文
posted @ 2008-01-14 20:17 Silent Void 阅读(1131) 评论(0) 推荐(1) 编辑
Delegate中的异步调用
摘要:1. 用EndInvoke等待异步调用; 2. 用WaitHandle等待异步调用; 3. 轮训查询等待异步调用; 4. 异步调用完成后,执行回调...... 阅读全文
posted @ 2007-07-23 10:07 Silent Void 阅读(474) 评论(0) 推荐(0) 编辑
深入理解virtual/new/override 这些关键字的意义
摘要:深入介绍virtual/new/override 这些关键字的意义 阅读全文
posted @ 2007-07-22 21:52 Silent Void 阅读(2180) 评论(15) 推荐(1) 编辑
托管堆上对象的大小(Size)和Layout
摘要: 默认情况下,C#编译器会在引用类型上运用[StructLayoutAttribute(LayoutKind.Auto)]特性,即按照CLR认为的最佳方式来排序实例中的字段顺序;当运用[StructLayout(LayoutKind.Sequential)]特性时,CLR会按照字段成员在被导出到非托管内存时出现的顺序依次布局,但我的测试结果是:貌似使用LayoutKind.Sequential与使用LayoutKind.Auto的结果相同;当运用[StructLayout(LayoutKind.Explicit)]时,我们可以自己设置实例中字段的位置。 在32位的计算机上,默认情况下,对于引用类型的实例,CLR总是按4byte进行内存对齐。 阅读全文
posted @ 2007-04-17 16:42 Silent Void 阅读(6590) 评论(12) 推荐(0) 编辑
Boolean和bool VS. 鸡蛋和鸡
摘要: MSDN中解释bool与Boolean的关系是:“bool 关键字是 System.Boolean 的别名”。观察上面的Boolean类型定义,在其继承的泛型接口和成员变量中,我们找到了“bool”的影子(我想可能时Reflector将IL代码反汇编时将类型Boolean翻译成C#中的关键字bool),也就是说Boolean的定义依赖与bool(Boolean)。这就好比鸡蛋与鸡,到底是先有鸡蛋还是先有鸡?到底是先有Boolean的类型定义还是先有Boolean类型呢? 阅读全文
posted @ 2007-04-12 16:58 Silent Void 阅读(1949) 评论(4) 推荐(0) 编辑
.net托管环境下struct实例字段的内存布局(Layout)和大小(Size)
摘要:默认(LayoutKind.Sequential)情况下,CLR对struct的Layout的处理方法与C/C++中默认的处理方式相同,即按照结构中占用空间最大的成员进行对齐(Align); 使用LayoutKind.Explicit的情况下,CLR不对结构体进行任何内存对齐(Align),而且我们要小心就是FieldOffset; 使用LayoutKind.Auto的情况下,CLR会对结构体中的字段顺序进行调整,使实例占有尽可能少的内存,并进行4byte的内存对齐(Align)。 阅读全文
posted @ 2007-04-12 16:58 Silent Void 阅读(5772) 评论(9) 推荐(1) 编辑
使用SOS - 在Visual Studio中启用非托管代码调试来支持本机代码调试
摘要:SOS(Son of Strike)扩展调试器可以用来显示CLR数据结构的内容。SOS是作为.net framework的一部分安装的(SOS.dll),位于%windir%\Microsoft.NET\Framework\v*.*.****(版本号)\目录下。在使用SOS(加载SOS.dll)进行调试的步骤 阅读全文
posted @ 2007-04-11 03:34 Silent Void 阅读(7370) 评论(6) 推荐(2) 编辑
Effective C# 摘录(6) - 杂项讨论
摘要:优先选择强异常安全保证;最小化互操作;优先选择安全代码;掌握相关工具与资源;为C#2.0做准备;了解ECMA标准 阅读全文
posted @ 2007-04-11 01:04 Silent Void 阅读(515) 评论(0) 推荐(0) 编辑
Effective C# 摘录(5) - 使用框架
摘要:重写函数优于事件处理器;理使用.NET运行时诊断;使用标准配置机制;定制和支持数据绑定;使用.NET验证;根据需要选用恰当的集合;优先选择DataSet,而不是使用自定义结构;利用特性简化反射;避免过度使用反射 阅读全文
posted @ 2007-04-09 23:21 Silent Void 阅读(621) 评论(0) 推荐(0) 编辑
Effective C# 摘录(4) - 创建二进制组件
摘要:尽可能实现CLS兼容的程序集;尽可能实现短小简洁的函数;尽可能实现小而内聚的程序集;限制类型的可见性;创建大粒度的Web 阅读全文
posted @ 2007-04-08 11:28 Silent Void 阅读(752) 评论(0) 推荐(0) 编辑
WinDbg配置和使用基础
摘要:运行WinDbg->菜单->File->Symbol File Path->按照下面的方法设置_NT_SYMBOL_PATH变量:在弹出的框中输入“C:\MyCodesSymbols; SRV*C:\MyLocalSymbols*http://msdl.microsoft.com/download/symbols”(按照这样设置,WinDbg将先从本地文件夹C:\MyCodesSymbols中查找Symbol,如果找不到,则自动从MS的Symbol Server上下载Symbols)。另一种做法是从这个Symbol下载地址中http://www.microsoft.com/whdc/devtools/debugging/symbolpkg.mspx,下载相应操作系统所需要的完整的Symbol安装包,并进行安装,例如我将其安装在D:\WINDOWS\Symbols,在该框中输入“D:\WINDOWS\Symbols”。 阅读全文
posted @ 2007-04-08 00:08 Silent Void 阅读(157528) 评论(27) 推荐(16) 编辑
类的静态构造函数的其他几个注意点
摘要:禁止在一个类的静态构造函数中访问另一个类中的静态成员…… 在类的静态构造函数不能有异常抛出…… C#中不支持子类继承父类的静态成员,但却可以通过子类类名来访问父类的静态成员…… 阅读全文
posted @ 2007-04-05 18:58 Silent Void 阅读(982) 评论(0) 推荐(0) 编辑
静态构造函数的执行时机
摘要:if(如果为类显式定义静态构造函数,例如上面的Type1) { if(程序中有访问该类的任意静态或实例成员) { 在进入Main函数之后,第一次访问该类中所定义的任何静态或实例成员之前,先调用静态构造函数; 以后将不再调用该静态构造函数,同一个静态构造函数最多只调用一次! } else { 程序中不调用该类的静态构造函数; } else { if(程序中有访问该类的任意静态或实例成员) { 在执行Main函数中的代码之前,先调用静态构造函数; 以后将不再调用该静态构造函数,同一个静态构造函数最多只调用一次! } else { 程序中不调用该类的静态构造函数; } } 阅读全文
posted @ 2007-04-04 07:17 Silent Void 阅读(958) 评论(2) 推荐(0) 编辑
用伪随机数生成器Random生成随机数序列
摘要:伪随机数(有库函数产生)与“理想中的”“真”随机数不同,伪随机数是由可确定的(deterministic)函数产生,虽然随机函数可以产生有随机特征的数字序列,但这些数字并不不具备真随机数的一些特性,并非统计意义上的随机数。伪随机数是可以确定的:知道序列中的一个数就可以获得其他剩下数字的有关信息;事实上,如果知道了序列的初始值(种子)通常可以确定整个序列。记得大一上计算机专业基础课的第一节课上,老师就给我们介绍了计算机程序的5个特性(详见附1),其中的一点就是确定性,即“对于相同的输入只能得出相同的输出”,伪随机数的生成正是符合这条金科玉律…… 阅读全文
posted @ 2007-04-03 15:08 Silent Void 阅读(11302) 评论(8) 推荐(1) 编辑
Effective C# 摘录(3) - 使用C#表达设计
摘要:使用C#表达设计 阅读全文
posted @ 2007-03-20 16:56 Silent Void 阅读(404) 评论(0) 推荐(0) 编辑
Effective C# 摘录(2) - .NET资源管理
摘要:.NET资源管理…… 阅读全文
posted @ 2007-03-15 20:04 Silent Void 阅读(413) 评论(0) 推荐(0) 编辑

1 2 下一页