Web Analytics
yangyang

码农兼一个普普通通小青年

All Posts


浅析.NET中的引用类型和值类型(下)

上一篇文章中简单讲了.NET中值类型和引用类型的区别,并分析了引用类型的内存布局和实现方式,并在开始的例子中简单分析了值类型相较于引用类型的若干优点。在平常的开发中,很多人一上来就用class,而很少去想到底该用class还是struct。本文详细介绍.NET中的值类型以及在使用中应该注意的问题。在某些情况下,使用值类型较引用类型可以显著减少内存占用和GC压力,提高程序的执行效率。本文参考《Pro .NET Performance》 《CLR Via C#》和 《Advanced .NET Debugging》,希望对您有帮助。 值类型内部实现 和引用类型相比,值类型具有相对简单的内存布局,但是这种简单的布局也引入了一些限制,尤其是在要将值类型“当做”引用类型使用的时候需要进行装箱操作。 上篇文章提到,使用值类型最主要的原因是:值类型具 …

.NET Performance Optimizing

浅析.NET中的引用类型和值类型(上)

.NET中的类型分为值类型和引用类型,他们在内存布局,分配,相等性,赋值,存储以及一些其他的特性上有很多不同,这些不同将会直接影响到我们应用程序的效率。本文视图对.NET 基础类型中的值类型和引用类型在内存中的布局,方法的调用,值类型如何实现接口,以及其他一些细节问题进行一些简要的讨论,文章主要参考《Pro .NET Performance》 和 《Advanced .NET Debugging》 ,希望给大家一点儿帮助。 一 简单例子 举一个简单的例子,我们有一个名为Point2D的对象,用来表示二维空间中的坐标,每一个坐标值x,y都用一个short类型表示,整个对象占4个字节。现在假设我们需要在内存中存储1000万个这样的坐标点集合对象。那么他们会占用多大内存呢?这个问题的答案其实在很大程度上依赖Point2D是值类型还是引用类型。如果他是引用类型,10 …

Method Table Sync Block

程序集的混淆及签名

一般地,用.NET编写的程序集在发布前,通常需要对代码进行混淆和强签名,下面简要介绍一下程序集的混淆和强签名的步骤及在实际开发中的实施。 1.创建一个公钥/私钥对 首先,需要创建一个公钥/私钥对。密钥如果有密码保护,则生成pfx文件,没有密码生成snk文件,pfx比snk文件较大些,在Visual Studio命令提示符下: Sn -k Certify.snk 该.snk文件应该由专门人员用专门设备保存起来。 然后,运用如下命令,从该公私密钥对中,提取出公钥,公钥发给每一个开发人员。 sn -p Certify.snk Certify.public.snk 2.创建一个控制台应用程序 为了掩饰如何对程序进行签名和混淆,首先创建一个控制台应用程序,名为Sign.exe,为了更好地说明签名及混淆前后代码的变化,我们使用ILDASM来查 …

Assembly Obfuscation

一次Debug经历

周五天晚些时候,部门发布了一个“世界末日”版本的产品,我们小组参与了其中Office插件的开发工作。这算是一个比较重要的节点。产品发布后,在同事机器上安装部署之后,Office插件发现了一个比较严重的Bug,就是用户在打开一个已经存在的Excel文件的时候,我们的插件不能正常加载,因为之前开发调试的时候,都是直接选择Excel软件为启动项的,这样,每一次都是直接打开的Excel程序,而不是一个文件。在检查这个Bug的时候又发现了另外一个比较严重的Bug,就是Excel关闭之后,任务管理器中的Excel.exe这个进程没有关闭,这个Bug在开发阶段我注意到了,以为是开发阶段调试的时候才有的,所以没有太在意。于是乎跟领导们反应之后,领导过来说这个Bug能不能修复,最好能修复,不可以的话,叫测试那边注意一点儿就可以。我说可以,但是需要一点儿时间。我和另外一个同事开 …

Excel Development Shared Add-in

Kinect骨骼数据与彩色影像和深度影像的对齐

很多同学留言问怎么讲两种影像数据显示在同一张屏幕上,也就是说怎么将骨骼数据叠加到彩色影像或者深度影像上,将彩色影像叠加到深度影像就不讨论了,因为没啥意义。 这个问题其实很简单,因为在Kinect Developer Toolkit中很多例子中又可以看到这两种类型的叠加,而源代码也都有,这也是为啥我不想将这个的原因。怎么将这三种影像显示在屏幕上我在第三讲:基础知识 下、第四讲:景深数据处理 上和 第六讲:骨骼追踪基础 上 都分别讲过。要点是, 在显示彩色影像和深度影像时最好使用WriteableBitmap对象; 要想将骨骼数据影像和深度影像,或者彩色影像叠加到一起,首先要确定深度影像的分辨率和大小,为了方便,这里将深度影像数据和彩色影像数据都采用640x480Fps30的格式,同时将Grid的大小也设置为640*480。 要将骨骼数据和深度影像数据叠加,需要将关 …

Kinect SDK Kinect

使用Kinect测量身高

使用Kinect测量身高的方法其实有很多种: 第一种方式是使用Kinect的视场角以及结合一些三角形几何运算,就可以大致测量出物体的高度,这一点在之前介绍深度影像处理的时候有提到。 第二种方式是使用Kinect骨骼追踪提供的20个关节点的相关坐标,在根据一定的算法测量出人体的身高。在Channel9上面的这个例子的一个分享,在这里拿过来和大家分享一下。在这里,根据臂展和身高有相似的关系,我对这个例子做了一点扩展,计算臂展来粗略计算身高,用臂展计算身高其实有个好处就是既可以使用正常模式(Normal model,20个关节点),可以使用坐姿模式(Seat model,10 个关节点),这样您坐着就可以测量身高,不过精度不保证哈。这里只是提供这么一个思路。 一. 计算身高的算法 Kinect获取的骨骼数据包含20个关节点的X,Y,Z坐标信息。您可能会想, …

Kinect SDK Kinect

深入理解Kinect for Windows开发

----微软Build2012大会:Kinect for Windows Programming Deep Dive 这个周末看了两天的微软Build 2012大会,真的是一次盛会,上面有很多的演讲主题,都是微软相关技术和产品的最新动态,我比较关注.NET、WPF、Office及Kinect相关开发,上面的演讲视频和PPT都可以下载,个人觉得比较精彩的有The Evolution of .NET ,回顾了微软推出.NET以来的历次开发者大会推出的新版本和新特性,里面还有10多年前比尔盖子老师在开发者大会上宣布.NET战略时的演讲视频,不觉得感叹岁月是把杀猪刀啊。 What's New for Developers in Office 2 …

Kinect SDK Kinect Kinect FaceTracking Kinect Skeleton Tracking Kinect Fusion

Reactive Extensions入门

前面我写过7篇文章粗略的介绍了一下Rx及其方方面面。Rx是一个好东西不然我也不会费这么大的力气来写这些东西。本文打算初略的讲一下传统异步编程方法的缺点,以及为啥Rx能够给异步编程带来新的体验。最后我听译了一篇关于Reactive Extension的非常好的一篇演讲,并制作了中英文字幕。希望大家看完这篇文章之后能够对Reactive Extension能够有比较深的印象,并在实际编程中遇到比较纠结的异步编程问题了能够想到Rx。 1. 传统异步编程存在的问题     异步编程比较困难,这一点老赵讲过很多次,在这里就我的理解有以下几点。 1.1 异步编程的方式太多,缺乏统一性     在.NET下面做异步编程其实有很多种选择的,如果基于事件的异步编程,经典的Begin/End异步方法对,以及针对以上两种存在的问题改进的CCR和AsyncEnumerator,还有F#中的异步工作流,以及C#5. …

Reactive Extensions Rx .NET

Kinect for Windows SDK开发入门(十六) 面部追踪上

在前面一篇文章中,我们使用Emgu来识别人的脸部,当时的Kinect SDK版本是1.0,五月份发布1.5版本的SDK之后,我们就能够直接使用Kinect实现人脸识别,而不需要借助第三方类库。 SDK1.5中新增了人脸识别类库:Microsoft.Kinect.Toolkit.FaceTracking使得在Kinect中进行人脸识别变得简单,该类库的源代码也在Developer Toolkit中。在Developer Toolkit中也自带人脸识别的例子,您也可以打开运行或者查看源代码。 本文使用一个简单的例子来演示如何使用Kinect中的面部追踪功能。本例子实现的简单功能是使用WPF来绘制一个简单的人脸图,然后使用面部追踪来让这个图动起来,这里面只使用了Kinect中获取面部的一些简单的信息,用来演示如何使用Kinect来进行面部追踪,所以您如果想要实现 …

Kinect SDK Kinect Kinect FaceTracking

Kinect for Windows SDK 1.6的改进及新特性

昨天晚些时候,微软发布了Kinect for Windows SDK 1.6版本,该版本距五月份发布的1.5版本已经有好几个月了。1.6版本对1.5版本进行了一些改进和更新。不过最值得一提的是,Kinect for Windows Sensor首次在中国发售,现在已经可以在京东上订购了,Kinect 逐渐成为微软硬件产品线中最重要的一员。 下面来看看SDK 1.6的改进,翻译自发布说明,翻译的不好的话,您已可以直接到msdn上查看: 1. SDK 1.6 的改进 支持Windows 8 Kinect SDK1.6,可以开发Windows 8桌面应用程序 支持Visual Studio 2012 Kinect SDK1.6支持VS2012,包括最新的.NET Framework 4.5 …

Kinect SDK