<<返回目录 Visual Studio vs虽然不是全宇宙唯一的IDE,但它是.net开发人员最常用的开发工具.它自带一个性能分析工具,你可以使用它来做开发,不同的vs版本在工具上会略有差别. VS可以分析CPU使用率,内存分配以及资源锁情况.它能在你开发与运行中对项目做综合的测试. 它很强大,可以准确的测量运行了生产环境数据的大型应用程序.但是它集成在vs里面,如果你希望在生产环境下使用,需要有一个独立的性能监控工具.这个微软帮你想好了,从vs2013以后的版本里,在安装光盘里有一个独立版…
<<返回目录 平均值 vs 百分比 在考虑要性能测试的目标值时,我们需要考虑用什么统计口径.大多数人都会首选平均值,但在大多数情况下,这个正确的,但你也应该适当的考虑百分数.但你有可用性的要求,作为性能测试的目标里肯定会有用百分比作的要求.举个栗子:"数据库请求的平均延迟必须小于10ms,95%是请求必须小于100ms" ...(这里我省略了对"95%是请求必须小于100ms"的翻译说明,我觉得中国的程序猿应该看得懂我翻译的那句话) 1,2,2,4,5,…
<<返回目录 Performance Counters(性能计数器) 性能计数器是监视应用程序和系统性能的最简单的方法之一.它有几十个类别数百个计数器在,包括一些.net特有的计数器.要访问这些可以通过系统自带的 性能监控程序(perfmon.exe)来实现. 图1-2.是PerfMon的主要窗口,它显示一个小的时间段内处理器计数器.垂直线表示当前实例,默认情况下100秒钟后图形将换行. 图1-3.这是很多类别里的其中一个计数器,还显示了适用这个计数器的应用实例. 每个计数器都有一个类别和一个…
减少分配率 这个几乎不用解释,减少了内存的使用量,自然就减少GC回收时的压力,同时降低了内存碎片与CPU的使用量.你可以用一些方法来达到这一目的,但它可能会与其它设计相冲突. 你需要在设计对象时仔细检查每个它并问自己: 我真的需要这个对象吗? 这个字段是我需要的吗? 我能减少数组的尺寸吗? 我能缩小primitives的尺寸吗(用Int32替换Int64,其它)? 这些对象,是否只有在极少数情况下,或者只有初始化的时候才用到? 是否能将一些类转为结构体使他们在栈上分配或者成为某个对象的一部分?…
返回目录 第二章:垃圾回收 垃圾回收是你开发工作中要了解的最重要的事情.它是造成性能问题里最显著的原因,但只要你保持持续的关注(代码审查,监控数据)就可以很快修复这些问题.我这里说的"显著的原因",实际上是我们对垃圾回收的理解和期望不正确导致的.在.NET开发中,内存的性能问题和CPU的性能问题一样多,这就是单独开一章主要描述这个问题的原因. 当我们提及垃圾回收造成的开销时,就会不如自主的紧张起来,但一旦你理解它,就能很好的优化你的程序.在后面文章里,你可以看到GC可以在大多数情况下,…
避免使用终结器 如果没有必要,是不需要实现一个终结器(Finalizer).终结器的代码主要是让GC回收非托管资源用.它会在GC完成标记对象为可回收后,放入一个终结器队列里,在由另外一个线程执行队列里对象的终结器方法.这就意味着,如果你实现一个类的终结器,你必须保证在它在终结器执行后能被正常回收.这需要消耗一些CPU资源在清理对象上,会极大降低GC的整体效率. 如果你实现一个终结器,你也必须实现一个IDisposable接口用来清理资源,并在Dispose方法里调用GC.SupperessFin…
将长生命周期对象和大对象池化 请记住最开始说的原则:对象要么立即回收要么一直存在.它们要么在0代被回收,要么在2代里一直存在.有些对象本质是静态的,生命周期从它们被创建开始,到程序停止才会结束.其它对象显然不需要永远存在下去,但他们的生命周期会存在程序的某些上下文里.它们的存活时间会超过0代(1代)回收.这些类型的对象可以作为池化对象的备选.这虽然需要你手动管理内存,但实际情况下这是一个很好的选择.另外一个重要的需要池化的对象是分配在LOH里的大对象. 没有一个单一的标准方案或者API来实现对象…
减少大对象堆的碎片 如果不能完全避免大对象堆的分配,则要尽量避免碎片化. 对于LOH不小心就会有无限增长,但LOH使用的空闲列表机制可以减轻增长的影响.利用这个空闲列表,我们可以在两块分配区域中间找到你所想要的可分配区域. 要做到这一点,就需要保证你在LOH里的分配都按照同一个尺寸或者同一个尺寸的倍数进行.例如,一个常见的需求是在LOH里分配缓冲区.要确保分配的每个缓冲区都是一个大小,或者是一个知名数字(1M)的倍数,而不要创建大小不一的缓冲区.这样做的话,如果一个缓冲区被回收,那么下一个缓冲区…
返回目录 基本操作 垃圾回收的算法细节还在不断完善中,性能还会有进一步的提升.下文介绍的内容在不同的.NET版本里会略有不同,但大方向是不会有变动的. 在.net进程里会管理2个类型的内存堆:托管和非托管.本地代码申请的,以及由CLR申请的都是非托管内存,使用Windows API 的 VirtualAlloc 方法进行申请.CLR里分配的托管对象则分配在托管堆里,这些对象可以被垃圾回收处理. 在托管堆里有还进一步分为小对象对和大对象堆(LOH).每个对象类型都有自己的一段堆内存段.每段的大小根…
配置选项 在基于"less rope to hang yourself with"思想下,.NET 框架没有给开发提供很多太多的配置选项.但在大多数情况下,GC会跟你的硬件配置,及可用资源以及程序自己的行为做调整.当然也提供一些高级的配置使用,但这取决于你程序的类型. 工作站与服务器 你首要的是为应用选择是在工作站还是服务器模式下运行. 系统默认为工作站模式.在这种模式下,GC在触发回收时,回收线程与当前主线程的优先级一样.对于简单的应用程序,特别是存在工作站里有多个托管进程需要做交互…
本章介绍了本书其它部分未涉及到的一些编码和设计原则.包含了一些.NET的应用场景,有些不会造成太大危害,有些则会造成明显的问题.剩下的则根据你的使用方法会产生不同的效果.如果要对本章节出现的原则做一个总结,那就是: 过度的优化会影响代码的抽象 这意味着,当你希望更高的优化性能,你需要了解每个层次代码的实现细节.本章会有很多相关介绍. 类 vs 结构体 类的实例都是在堆上分配的,通过指针的引用进行访问.传递这些对象代价很低,因为它只是一个指针(4或者8直接)的拷贝.然而,对象也有一些固定开销:8或…
本篇是 Writing High-Performance .NET Code 的目录索引,翻译内容不定时更新,目录也会同步修改. 性能测量及工具 选择什么来衡量 平均数vs百分比 工具介绍 Visual Studio 性能计数器 ETW事件 PerfView CLR Profiler Windbg Measurelt 内部测试代码 SysInternals 工具集 数据库 其他工具 垃圾回收 基本操作 基本选项 工作站与服务器 后台GC 低延迟模式 减少分配率 最重要的规则 缩短对象的生命周期…
<Getting Started with WebRTC>第一章 WebRTC介绍 ​ 本章是对WebRTC做概念性的介绍. 阅读完本章后.你将对下面方面有一个清晰的理解:   .  什么是WebRTC   .  怎样使用它   .  哪些浏览器支持 1.1. WebRTC介绍 World Wide Web(WWW)是出如今1990年代的早期, 它是建立在使用HREF超链接的以页面为中心的模型上. 在这个网页的早期模型中,浏览器从一个网页到还有一个网页是通过更新HTML内容来实现的. 到了20…
 作者:[美]Adam Freeman      来源:<精通ASP.NET MVC 4> 3.Visual Studio 的单元测试 有很多.NET单元测试包,其中很多是开源和免费的.本文打算使用 Visual Studio 附带的内建单元测试支持,但其他一些.NET单元测试包也是可用的. 为了演示Visual Studio的单元测试支持,本例打算对示例项目添加一个 IDiscountHelper 接口的新实现. 在 Models 文件夹下新建类文件 MinimumDiscountHelpe…
Grunt和Gulp构建工具在Visual Studio 2015中的高效的应用 Grunt和Gulp是Javascript世界里的用来做自动压缩.Typescript编译.代码质量lint工具.css预处理器的构建工具,它帮助开发者处理客户端开发中的一些烦操重复性的工作.Grunt和Gulp都在Visual studio 2015中得到支持.ASP.NET 项目模板默认使用Gulp. Grunt和Gulp Grunt和Gulp有什么区别?Gulp虽然是稍微晚一点登场的,但是它因crisp pe…
3.Visual Studio 的单元测试 有很多.NET单元测试包,其中很多是开源和免费的.本文打算使用 Visual Studio 附带的内建单元测试支持,但其他一些.NET单元测试包也是可用的. 为了演示Visual Studio的单元测试支持,本例打算对示例项目添加一个 IDiscountHelper 接口的新实现. 在 Models 文件夹下新建类文件 MinimumDiscountHelper.cs : namespace EssentiaTools.Models { public…
第二章 欢迎使用Visual Studio 1,AssemblyInfo文件 包含程序集的属性,向应用程序添加元数据 [assembly:<attribute>(<setting>)] AssemblyInfo常用属性 属性 描述 AssemblyTitle 程序集标题 AssemblyDescription 程序集描述 AssemblyCompany 程序集公司名 AssemblyProduct 程序集产品名 AssemblyCopyright 程序集的版权字符串 Assembl…
Bochs 是一个可以完全模拟 Intel x86 计算机的虚拟机系统.它包含了 Intel x86 CPU 仿真.常见设备仿真.以及定制 BIOS.Bochs 可以虚拟多种不同类型的 x86 CPU ,从早期的 386 到最新的 x86-64 Intel 和 AMD 处理器,甚至是市场上还没有销售的 CPU. Bochs 会去解释从电源启动开始的每一条指令,以及所有 PC 标准外设:键盘.鼠标.VGA 卡/监视器.磁盘.网卡.定时器芯片 等等.由于 Bochs 模拟了所有的 PC 环境,因此所…
多年来,Javascript一直在web应用开发中占据重要的地位,但是很多开发者往往忽视一些性能方面的知识,特别是随着计算机硬件的不断升级,开发者越发觉得Javascript性能优化的好不好对网页的执行效率影响不明显.但在某些情况下,不优化的Javascript代码必然会影响用户的体验.因此,即使在当前硬件性能已经大大提升的时代,在编写Javascript代码时,若能遵循Javascript规范和注意一些性能方面的知识,对于提升代码的可维护性和优化性能将大有好处. 下面给出编写高性能的Javas…
草草的看完第一章,虽然看的是译文也是感觉涨姿势了, 我来总结一下: 由于 大多数浏览器都是 single process 处理 ui updatas and js execute 于是产生问题: js (script tag) will blocking page processing 上图说话: 于是大家动脑筋想办法 想到了三个办法 1. Parallel downloads, then execute  并行下载,然后执行. 2.Download times less,Less downlo…
Github 官方地址 代表作: Visual Studio Code Atom - Code editor. Github开源的代码编辑器,Electron起源地 Visual Studio Code - Cross-platform IDE. 近几年最火的代码IDE Hyper - Terminal. 3万多星的命令行窗口,慌了! 其他 本章主要内容 理解Electron是什么 学习Electron基于什么技术 了解使用Electron和传统Web应用程序有什么不同 构建Electron应用…
第一章 Thread导论 为何要用Thread ? 非堵塞I/O      I/O多路技术      轮询(polling)      信号 警告(Alarm)和定时器(Timer) 独立的任务(Task) 并行算法 第二章 Thread的创建与管理 一.什么是Thread ?     Thread是所在主机运行的应用程序任务(task). 仅仅有一个线程的样例: public class Factorial { public static void main(String[] args) {…
mariadb(第一章)   数据库介绍 1.什么是数据库? 简单的说,数据库就是一个存放数据的仓库,这个仓库是按照一定的数据结构(数据结构是指数据的组织形式或数据之间的联系)来组织,存储的,我们可以通过数据库提供的多种方法来管理数据库里的数据 更简单的理解形象,数据库和我们生活追踪存放杂物的储物间仓库性质一样,区别只是存放的东西不通,杂物间存放实体的物件,而数据库里存储的是数据,这样我们就对数据库有一个初步了解了. 数据库诞生于1950年,随着信息技术的发展和人类社会的不断进步,特别是2000…
然后,Windows下有什么好的内存泄漏检測工具呢?微软提供Visual Studio开发工具本身没有什么太好的内存泄漏检測功能.我们能够使用第三方工具Visual Leak Detector(下面简称vld). vld工具是VC++环境下一款小巧易用.免费开源的内存泄漏检測工具,vld能够显示导致内存泄漏的完整内存分配调用堆栈. vld的检測报告能够对每一个内存泄漏点提供完整的堆栈跟踪.而且包括其源文件及行号信息. 安装过程是,先在到地址http://vld.codeplex.com/下载vl…
Grunt和Gulp是Javascript世界里的用来做自动压缩.Typescript编译.代码质量lint工具.css预处理器的构建工具,它帮助开发者处理客户端开发中的一些烦操重复性的工作.Grunt和Gulp都在Visual studio 2015中得到支持.ASP.NET 项目模板默认使用Gulp. Grunt和Gulp Grunt和Gulp有什么区别?Gulp虽然是稍微晚一点登场的,但是它因crisp performance和优雅的语法受到欢迎.与Grunt不同,Grunt往往在硬盘上是…
开发人员可以使用Sonar的集成插件在开发阶段进行实时代码质量审核,在代码编写阶段分析出当前代码的质量及规范漏洞,并给出合理的修改建议.编写高质量.高维护性的代码变得更简单! VS集成Sonar之前        集成sonar之前,项目显示没有任何警告及错误.开发人员只能保证代码无错误,却无法分析出代码的隐患及不规范性. Sonar集成 打开VS2015,通过工具(T)-> 扩展与更新(U)打开扩展安装包界面       在扩展和更新界面中左侧选择联机,通过安装包搜索框输入Sonar,在查询出…
7月21日凌晨最新消息,面向大众用户的Visual Studio 2015集成开发工具正式版免费试用版已经推出.本文帮大家汇总一下简体中文社区版.专业版以及企业版在线安装版以及ISO离线安装镜像下载地址. Visual Studio Community 2015简体中文版(社区版,针对个人免费): http://download.microsoft.com/download/B/4/8/B4870509-05CB-447C-878F-2F80E4CB464C/vs2015.com_chs.iso…
1.首先全新安装win8.1 略 破解激活.... 2.安装Visual Studio 2015 Visual Studio 2015 是免费的,不存在破解版本, 如果安装过程中存在问题,建议先把本文读完再安装. 官 Visual Studio 2015 Preview Downloads 官方页面:http://www.visualstudio.com/en-us/downloads/visual-studio-2015-downloads-vs Microsoft Visual Studio…
运行ElasticSearch(Running ElasticSearch) 让我们运行我们的第一个实例.转到bin目录并从命令行运行以下命令: ./elasticsearch –f (Linux or OS X) elasticsearch.bat –f (Windows) - f选项告诉ElasticSearch程序不应该脱离控制台,应该运行在前台.这让我们看到程序生成的诊断消息并通过按下Ctrl + C来停止它.另一个选项是- p,这告诉ElasticSearch进程标识符应该通过这个参数…
Emmet 是一个编辑器插件,它以一种简写的语法规则可用于快速编写html或css文档内容,它支持多种编辑器. 从官网:http://emmet.io/ 可下载各个编辑器的插件.notepad++ 插件下载地址为:https://github.com/emmetio/npp#readme也可以从Notepad++ "插件"->"插件管理器"菜单中安装Emmet插件,如果是手动下载安装包方式安装还需要安装Python插件.安装好插件后可以在"设置&qu…