
C#研究
微量
Coding
展开
-
C #中几个线程同步对象的使用方法
在编写多线程程序时无可避免会遇到线程的同步问题。什么是线程的同步呢? 举个例子:如果在一个公司里面有一个变量记录某人T的工资count=100,有两个主管A和B(即工作线程)在早一些时候拿了这个变量的值回去 ,过了一段时间A主管将T的工资加了5块,并存回count变量,而B主管将T的工资减去3块,并存回count变量。好了,本来T君可以得到102块的工资的,现在就变成98块了。这就是线程转载 2008-09-02 19:32:00 · 999 阅读 · 0 评论 -
WinDbg+SOS:Web服务器High CPU Hang(100%)实例分析
下午,msn上面一个朋友发了一个dump文件过来,说是Web服务器的CPU使用率在100%,找不到问题在什么地方,让帮忙看看,遂让把dump文件传过来,找找问题出在哪儿。 Framework2.0,Windows 2k的OS。 加载了Dump文件之后,接着加载2.0版本的SOS扩展调试模块: .load C:/WINDOWS/Microsoft转载 2009-11-09 01:40:00 · 1887 阅读 · 1 评论 -
利用P/Invoke Interop Assistant写一个最简单的CLR程序
刚刚听过MSDN Webcast关于P/invoke的讲座,讲师张羿做了一个最简单的调用 user32.dll 的 MessageBox 函数的范例。让我想起当年学VB6时的API调用,是一个道理。记得那时候就有一个 API 辅助查询工具,P/Invoke Interop Assistant 与那个功能类似,使用它就不必自己去查找 MSDN 或者程序的头文件信息了,甚至不必转载 2009-11-08 23:57:00 · 1065 阅读 · 0 评论 -
Windbg 常用断点
Windbg 常用断点拦截窗口: bp CreateWindow 创建窗口 bp CreateWindowEx(A) 创建窗口 bp ShowWindow 显示窗口 bp UpdateWindow 更新窗口 bp GetWindowText(A) 获取窗口文本 拦截消息框: bp MessageBox(A) 创建消息框 bp MessageBoxExA 创建消息框 bp MessageBoxInd转载 2009-11-09 01:48:00 · 716 阅读 · 0 评论 -
使用WinDbg+SOS及WinDbg Script寻找内存中DataTable第M行N列的值
DataTable在内存中是如何存储一张表的结构的呢?如何使用Windbg直接在内存中找到一个DataTable里面的第M列第N行的值呢?这的确是一个比较有趣的问题^_^ 下面的内容,主要是讲如何用windbg+sos来看看一个DataTable在内存中是如何存储的,以及寻找内存中一个DataTable特定的行列的一个单元的值是多少。同时,还有一点Windbg Script的使用转载 2009-11-09 01:46:00 · 1070 阅读 · 0 评论 -
Windbg寻找Managed Founction参数值
问题源自一个Seminar,如何使用Windbg找到在函数调用的时候,所传递的参数的值。 当使用live Debug模式attach到一个managed Process的时候,默认情况下并不显示函数内部之间的调用,这个时候,需要在这个函数没调用之间给下一个断点。 基于对一个托管函数下断点的两种方法,在上面一片文章里面已经讲过了,这里就转载 2009-11-09 01:38:00 · 921 阅读 · 0 评论 -
CLR探索系列:Windbg+SOS动态调试分析托管代码
在使用VS进行托管应用程序的调试的时候,有的时候总感觉有些力不从心。譬如查看一个托管堆或者计算堆栈的时候,VS就不能胜任了。这个时候,Windbg+SOS扩展调试模块就为我们提供了一个很好的解决方案。我们看一段代码:class Program { static void Main(string[] args) { Program b =转载 2009-11-09 01:32:00 · 555 阅读 · 0 评论 -
使用WinDbg获得托管方法的汇编代码
这是一个没有多大价值的小实验,对于大家了解.NET编程等方面几乎没有任何好处,尽管老赵一直强调“基础”,例如扎实的算法和数据结构能力,并且对一些必要的支持,例如操作系统,计算机体系结构,计算机网络有足够的了解,拥有“常识”,在需要的时候有足够的能力去深入了解便可;但是对于还有一些科目,例如“编译原理”,它虽然可以加强对于一个人对程序的理解,但是我也并不觉得这是一条“必经之路”。了解黑盒内部肯定转载 2009-11-09 11:56:00 · 551 阅读 · 0 评论 -
CLR探索系列:Windbg+SOS剖析揭示域世界
在CLR的世界中,有一系列的令人Amazing的技术和架构。其中,CLR对应用程序在内存中内存分配,执行模型,程序之间的交互等一系列的技术,值得每一个致力于DotNet平台的技术人员深究。编程人员在开发的过程中,如果把程序集的加载(Assemblies Load),反射(Reflection),寄宿(Hosting),应用程序域(AppDomain),这四种技术结合起来使用的话,不仅能更好的转载 2009-11-09 01:36:00 · 509 阅读 · 0 评论 -
C#中ToString格式大全
C 货币 2.5.ToString("C") ¥2.50 D 十进制数 25.ToString("D5") 00025 E 科学型 2500转载 2009-10-31 15:34:00 · 329 阅读 · 0 评论 -
C#中的abstract与virtual
abstract 修饰符可以和类、方法、属性、索引器及事件一起使用。在类声明中使用 abstract 修饰符以指示类只能是其他类的基类。抽象类具有以下特性: ·抽象类不能实例化。 ·抽象类可以包含抽象方法和抽象访问器。 ·不能用 sealed 修饰符修改抽象类,这意味着该类不能被继承。 ·从抽象类派生的非抽象类必须包括继承的所有抽象方法和抽象访问器的实实现。 ·在方法或属性声明中使用 a原创 2009-11-07 20:02:00 · 469 阅读 · 0 评论 -
架构师书单 2nd Edition
"其实中国程序员,现在最需要的是一张安静的书桌。",的确,中国架构师大多缺乏系统的基础知识,与其自欺欺人的宣扬"读书无用,重在实践变通,修身立命哲学书更重要",把大好时间用来追逐互联网上的片言只语,不如直面缺陷,系统的学习一次。 书单越读越薄,好书真的不多哇。 一、Software Architecture篇 这个领域没有什么"畅销书",可能读者中本来就是开发设转载 2009-10-30 00:27:00 · 517 阅读 · 0 评论 -
C#引用类型详细剖析
C#引用类型和值类型的区别——值类型和引用类型在内存中的部署经常听说,并且经常在书上看到:值类型部署在栈上,引用类型部署在托管堆上。实际上并没有这么简单。MSDN上说:托管堆上部署了所有引用类型。这很容易理解。当创建一个应用类型变量时:object reference = new object(); 关键字new将在托管堆上分配内存空间,并返回一个该内存空间的地址。左边的re转载 2009-10-29 00:06:00 · 825 阅读 · 0 评论 -
关于Ajax 错误:'sys'未定义解决方法.
Web.Config 中配置成: 重新编译,运行即可.如果配置Web.Config后运行仍然报错误,请将所有页面的中的 紧跟在标记之后.转载 2009-06-11 09:26:00 · 459 阅读 · 0 评论 -
用C#编写ActiveX控件(一)
前些日子做一个Web项目,必须自己编写一个ActiveX控件。如今的ActiveX控件大多是使用VB/C++来开发的,而我对他们并不熟悉,因此考虑使用熟悉的C#编写ActiveX控件。 首先,建立一个WinForm控件项目HelloWorld,并拖入一个Label控件,文字设为HelloWorld,如图: UserControl1.cs内容如下: using Sy转载 2008-11-05 15:53:00 · 418 阅读 · 0 评论 -
用C#编写ActiveX控件(三)
在前面我们已经完成了ActiveX控件的开发,接下来的就是发布它了。 首先,我们建立一个windows安装项目,并将ActiveX控件的主输出添加到项目输出中。然后,改动ActiveX控件的主输出文件,将其Register属性改为vsdrpCOM.如图: 下一步,我们改动项目属性,将引导程序更改为 Web引导程序。很遗憾的是,在 Web引导程序设置 中的安装文件夹URL中转载 2008-11-05 16:01:00 · 600 阅读 · 1 评论 -
用C#编写ActiveX控件(二)
在我的上一篇blog中,已经实现了一个最基本的ActiveX控件。当然,我们编写的任务还没有完成。首先,我们先尝试实现和JS的交互能力。 我们在Demo中加入ShowMessage方法: public void ShowMessage(string msg){ if(msg != null) { MessageBox.Show(msg); }转载 2008-11-05 15:59:00 · 482 阅读 · 0 评论 -
Windbg在Managed App中设置函数断点的几种方法
本文介绍两种使用Windbg在Managed App中设置断点的方法。一种是在live Debug的时候,attach到了Process之后。另外一种是动态调试的时候,如何给几个模块的特定方法下一个断点。 使用Windbg在Native Code里面下断点是比较方便的,bp加上一个内存地址就可以做到。但是在托管的时候给一个方法下一个断点稍微有点麻烦。因为Wind转载 2009-11-09 01:45:00 · 971 阅读 · 0 评论