摘要:
From: http://www.c-sharpcorner.com/UploadFile/shivprasadk/452069230108152009163244PM/4520692301.aspx?ArticleID=50bdd822-23d0-4baa-ab0a-21314b94d9e5 .net代码性能降低的一个主要原因是内存消耗。很多开发人员在解决性能瓶颈的时候将精力集中在执行时间上,... 阅读全文
随笔档案-2011年08月
.net 垃圾回收学习[How To: Use CLR Profiler][翻译&&学习]【3】
2011-08-28 22:54 by 一一九九, 423 阅读, 收藏,
摘要:
http://msdn.microsoft.com/zh-cn/library/ms979205注意:内容可能已经过期了。注意:CLR Profiler最新版本:http://www.microsoft.com/download/en/details.aspx?id=16273Analyzing Your Application's Allocation Profile你的application profiler呈现了对象都是在那里分配的,对象的生命周期以及GC的行为。 在下面的部分,Application持有对象比需要的更长一些。这个部分采用ProfilerSample2示例。To 阅读全文
.net 垃圾回收学习[How To: Use CLR Profiler][翻译&&学习]【2】
2011-08-28 22:19 by 一一九九, 298 阅读, 收藏,
摘要:
http://msdn.microsoft.com/zh-cn/library/ms979205注意:内容可能已经过期了。注意:CLR Profiler最新版本:http://www.microsoft.com/download/en/details.aspx?id=16273Identifying Common Garbage Collection Issues可以使用CLR Profiler.exe来识别和隔离GC相关的内存问题,包括内存消耗相关的内容:过多的分配。 Excessive Allocations未知的分配。 Unknown Allocations内存泄漏。 memory le 阅读全文
.net 垃圾回收学习[How To: Use CLR Profiler][翻译&&学习]
2011-08-28 20:52 by 一一九九, 394 阅读, 收藏,
摘要:
http://msdn.microsoft.com/zh-cn/library/ms979205注意:内容可能已经过期了。Improving .NET Application Performance and ScalabilityJ.D. Meier, Srinath Vasireddy, Ashish Babbar, and Alex Mackman Microsoft CorporationMay 2004ContentsOverview Downloading CLR Profiler What You Must Know Profiling Applications Profiling 阅读全文
.net 垃圾回收学习[NET 2.0 Performance Guidelines - String Operations]【翻译&&学习】
2011-08-28 18:33 by 一一九九, 246 阅读, 收藏,
摘要:
From: http://www.guidanceshare.com/wiki/.NET_2.0_Performance_Guidelines_-_String_Operations目录:1 Avoid Inefficient String Concatenation2 Use + When the Number of Appends Is Known3 Use StringBuilder When the Number of Appends Is Unknown4 Treat StringBuilder as an Accumulator5 Use the Overloaded Compar 阅读全文
.net垃圾回收学习[NET 2.0 Performance Guidelines - Garbage Collection][翻译加学习]【2】
2011-08-28 16:13 by 一一九九, 152 阅读, 收藏,
摘要:
From:http://www.guidanceshare.com/wiki/.NET_2.0_Performance_Guidelines_-_Garbage_CollectionSet Unneeded Member variables to null before making long-running calls在开始一段运行时间较长的代码之前,你应该明确的设置不需要的对象变量为NULL,以便在运行时间较长的代码调用之前能够被收集。如下代码所示:class MyClass{ private string str1; private string str2; void DoSomeP.. 阅读全文
.net垃圾回收学习[NET 2.0 Performance Guidelines - Garbage Collection][翻译加学习]
2011-08-28 11:35 by 一一九九, 317 阅读, 收藏,
摘要:
From:http://www.guidanceshare.com/wiki/.NET_2.0_Performance_Guidelines_-_Garbage_Collection目录:Identify and analyze your application’s allocation profileAvoid Calling Gc.CoollectConsider Using Weak References with Cached DataPrevent the promotion of Short-Lived ObjectsSet Unneeded Member Variables to 阅读全文
.net垃圾回收学习【Back to basics: Why use garbage collection】【翻译&&学习】
2011-08-28 10:04 by 一一九九, 238 阅读, 收藏,
摘要:
From:http://blogs.msdn.com/b/abhinaba/archive/2009/01/20/back-to-basics-why-use-garbage-collection.aspxGC所做的事情就如同其名字“自动垃圾回收”一样。GC基本上主要负责两个基本的场景:移除垃圾、 避免悬挂指针。这两个是内部相关关联的的但是是不同的场景。Garbage Collect考虑一个典型的对象引用关系图(见下图)。 在对象图中,每个边都是一个Object,箭头指示对象的对象的引用。如图所示:A是一个引用B的Object,一个程序如果能够使用某个对象,那么这个对象需要在引用的链表中。引用 阅读全文
.net 垃圾回收学习【Memory leak via event handlers】【翻译&&学习】
2011-08-27 18:07 by 一一九九, 262 阅读, 收藏,
摘要:
From: http://blogs.msdn.com/b/abhinaba/archive/2009/05/05/memory-leak-via-event-handlers.aspx分享一下我们的客户最近比较感兴趣的内存溢出的问题。The short version问题的核心是他们有Event sinks和Sources。 Event sinks被正确的释放,然而,在释放的过程中他们忘记了从触发事件的source中移除event sink.所以,事实上,已经被释放掉的sinks仍然可以从event source被reachable。所以GC不会释放Event sinks并且会导致泄漏的对象 阅读全文
.net垃圾回收学习【Back to Basics: Memory leaks in managed systems】【翻译&&学习】
2011-08-27 17:24 by 一一九九, 212 阅读, 收藏,
摘要:
From: http://blogs.msdn.com/b/abhinaba/archive/2010/01/05/back-to-basics-memory-leaks-in-managed-systems.aspx有些人问他的Managed application为什么会内存一直在不停的增加,而且这很明显的是内存泄漏的标志,这些人都持有这个观点he is using .net and hence there should surely be no leaks。其他一些人也持有类似的观点。然而这个观点是不正确的,可以通过以下两篇文章了解GC的工作机制:http://blogs.msdn.co 阅读全文
.net 垃圾回收学习[Back To Basics: How does the GC find object references][翻译&&学习]
2011-08-27 16:58 by 一一九九, 239 阅读, 收藏,
摘要:
From:http://blogs.msdn.com/b/abhinaba/archive/2009/03/03/back-to-basics-how-does-the-gc-find-object-references.aspx 大多数的内存收集算法需要知道被一个给定的对象引用的所有的其他对象,以便能够正确的遍历对象层级树.所有的reference counting, making-sweep and even coping collector 需要了解对象的引用关系。考虑到我在mark-sweep gc中讲到的mark 算法。void Mark(Object *pObj) { if(!Ma 阅读全文
.net垃圾回收学习[Back to Bascis: Generational garbage collection][翻译&&学习]
2011-08-25 07:16 by 一一九九, 287 阅读, 收藏,
摘要:
From: http://blogs.msdn.com/b/abhinaba/archive/2009/03/02/back-to-basics-generational-garbage-collection.aspx 在mark-sweep garbage collection一文中提到mark-sweep garbage的算法的最大的缺点就是在整个heap需要标记和清除的时候引入了... 阅读全文
.net 垃圾回收学习【.net 框架程序设计】[CH19: 自动内存管理]
2011-08-24 20:25 by 一一九九, 273 阅读, 收藏,
摘要:
19.1 基本原理解析(一)访问一个资源所需要的几个步骤:为类型实例分配一定的空间初始化内存, 设置资源的初始化状态访问类型成员来使用资源。销毁资源状态,执行清理工作。释放内存。 由于垃圾收集器对内存中的类型表示何种资源一无所知,所以垃圾收集器对第四步并不清楚如何执行,为了使资源得到正确的清理,开发人员必须自己编写执行这部分工作的代码。大多数类型,比如Int32,Point,String,ArrayList 以及SerializationInfo,标识的资源并不需要特殊的清理操作。例如: 一个Point资源完全可以通过销毁对象内存中的X字段和Y字段来完成清理工作。另一方面,对于一个表示(或者说 阅读全文
.net垃圾回收学些【The Truth of garbage collection】【续】
2011-08-24 17:32 by 一一九九, 206 阅读, 收藏,
摘要:
From: http://java.sun.com/docs/books/performance/1st_edition/html/JPAppGC.fm.html#998394Reference Objects 在JAVA2之前,所有的引用都是强引用。 这意味着开发人员没有任何方式和GC进行交互,除了通过像System.gc等强制方法。 JAVA2引入了java.lang.ref Package。 图A-4显示了这个包中的类的层级结构。这个包定义了reference-object类,通过这些类可以和GC进行有限的交互。 Reference Object用来维护某个对象的引用,此时GC仍然能够回 阅读全文
.net 垃圾回收学习 The Truth About Garbage Collection [Java][翻译]
2011-08-23 23:17 by 一一九九, 279 阅读, 收藏,
摘要:
From:http://java.sun.com/docs/books/performance/1st_edition/html/JPAppGC.fm.html#998394 GC有可能是Java Platform上被最多用户误解的特性。GC的目的以及对外宣称的都是将应用程序开发人员从内存管理的职责上释放出来,然而,这个目的就没有轻易的达到,在另外一方面,有些开发人员经常做一些操作要求进行垃圾回收,做的事情反而比要求的更多一些。对GC有一个比较稳固的理解是编写鲁棒、高性能的JAVA Platform程序的必要条件。 这个附录提供了对垃圾回收机制的一个概览,这些能够帮助你很好的理解内存管理。这个 阅读全文
.net垃圾回收学习【C#中的stack和Hepa】【续2】
2011-08-21 22:35 by 一一九九, 368 阅读, 收藏,
摘要:
From http://www.c-sharpcorner.com/UploadFile/rmcochran/csharp_memory2B01142006125918PM/csharp_memory2B.aspx记录学习。Passing Reference Types. 传递引用类型的参数和之前通过引用传递至类型的参数有点类似。如下代码: public class MyInt{ public int MyValue;}当调用Go方法的时候,由于MyInt是一个引用类型,所以在heap创建public void Go(){ MyInt x = new MyInt();}当我们执行如下代... 阅读全文
.net垃圾回收学习[C#中的Stack和heap][续3]
2011-08-21 22:31 by 一一九九, 206 阅读, 收藏,
摘要:
From: http://www.c-sharpcorner.com/UploadFile/rmcochran/chsarp_memory401152006094206AM/chsarp_memory4.aspxIn this article we'll cover an issue that arises from having reference variables in the heap and how to fix it using ICloneable.A Copy is not A Copy 为了定义问题所在,我们将要观察在heap上有一个value type和 refer 阅读全文
.net垃圾回收学习【C#中的Stack和heap]【续1】
2011-08-21 10:53 by 一一九九, 295 阅读, 收藏,
摘要:
From:http://www.c-sharpcorner.com/UploadFile/rmcochran/csharp_memory2B01142006125918PM/csharp_memory2B.aspx学习加记录。 本部分主要讲Pointer基本概念。Parameters, the Big Picture 当我们调用一个方法的时候,会发生如下情况:为在Stack上执行的方法所需要的信息分配空间(called stack frame). 包括正在运行的函数的调用地址(calling address)。调用地址(call address)是一个指针,一般是一个GoTo的指令,起作用是当 阅读全文
.net 垃圾回收学习[C#中的stack和Heap]
2011-08-20 18:27 by 一一九九, 827 阅读, 收藏,
摘要:
From: http://www.c-sharpcorner.com/UploadFile/rmcochran/csharp_memory01122006130034PM/csharp_memory.aspx翻译加学习。 虽然在.net framework下我们不需要主动的关心内存管理和垃圾回收,但是我们仍然需要了解内存管理和垃圾回收以便更好的优化我们的application. 当然,对内存管理如何工作有关基本的了解有助于我们理解我们写的程序中变量的行为。 .net framework使用stack和heap两种结构在内存中存储指令和数据。Stack vs Heap: what’s the d 阅读全文
.net 垃圾回收学习[Stack 和 Heap的理解][续2]
2011-08-20 16:44 by 一一九九, 290 阅读, 收藏,
摘要:
from: http://stackoverflow.com/questions/79923/what-and-where-are-the-stack-and-heap这里继续看其他人答案和补充,深入理解。答案四。 关于Stack和Heap的实现在不同的编译器和处理器架构之间差异很大,但是,这里有个简化的解释。stack和heap都是由操作系统分配的内存区域。(通常是映射到物理内存的虚拟内存)在一个多线程的环境中,每一个线程都会有自己独立的stack,但是会共享一个heap.对于heap的并发访问是需要被控制的,但是栈上则没有此要求。The heap:heap通常包含一个记录使用的和空闲的内. 阅读全文
.net 垃圾回收学习[Stack 和 Heap的理解][续1]
2011-08-20 15:26 by 一一九九, 297 阅读, 收藏,
摘要:
from: http://stackoverflow.com/questions/79923/what-and-where-are-the-stack-and-heap这里继续看其他人答案和补充,深入理解。答案二 Stack:和heap一样存储在计算机RAM中。在stack上创建的变量一旦超过了生命周期会被自动回收释放。和heap相比,为变量分配空间更快一些。实现为实际的Stack的数据结构。存储局部数据,返回地址,用于参数传递当stack使用太多的时候会栈溢出。在stack上创建的数据可以不通过指针来访问。如果你在编译之前就知道有多少空间需要分配,并且需要分配的空间不是很大的话,你会使用St 阅读全文
.net 垃圾回收学习[Stack 和 Heap的理解]
2011-08-20 11:43 by 一一九九, 385 阅读, 收藏,
摘要:
from: http://stackoverflow.com/questions/79923/what-and-where-are-the-stack-and-heap CLR的内存管理经常涉及到的两个字就是“堆栈”,CLR针对在这两种不同结构上的对象采取了不同的内存管理模式,所以需要先了解和区分“堆栈“。 先原文翻译一下,这篇Q&A比较有意思,有很多人解释了stack 和 heap的区别,涉及了方方面面,答案方面也是不止一个答案投票很多。Questions: 编程类书籍经常解释说值类型是创建在Stack上的,引用类型是创建在heap上的,却没有解释这两种(stack和heap)到底是 阅读全文
NHibernate in Action: write POCOs【Association】【2】
2011-08-17 22:46 by 一一九九, 173 阅读, 收藏,
摘要:
在这里实现上两次提到的模型中的代码,依据的图是如下的图: 由于作者并没有提供详细的业务类的说明,这里仅仅根据这张图构建出来相关的Model,然后在根据昨天提供的源码一步步地的细化。 说明: 1. NH要求提供默认的构造函数,这里明确一下每个类都添加这样的构造函数。 2. 不在代码中写明白每个类的其他构造函数,比如XXXClass(ParamterA, ParameterB, Paramete... 阅读全文
NHibernate in Action: write POCOs【Properies】【1】
2011-08-17 07:03 by 一一九九, 194 阅读, 收藏,
摘要:
在这里实现上两次提到的模型中的代码,依据的图是如下的图: 由于作者并没有提供详细的业务类的说明,这里仅仅根据这张图构建出来相关的Model,然后在根据昨天提供的源码一步步地的细化。 说明: 1. NH要求提供默认的构造函数,这里明确一下每个类都添加这样的构造函数。 2. 不在代码中写明白每个类的其他构造函数,比如XXXClass(ParamterA, ParameterB, Paramete... 阅读全文
C# in depth: Delegates and Events[读书笔记加翻译]
2011-08-15 22:53 by 一一九九, 434 阅读, 收藏,
摘要:
http://csharpindepth.com/Articles/Chapter2/Events.aspx?printable=true A shortcut: field-like events 默认的Event声明方法如下: public event EventHandler MyEvent; 这种方法创建了一个delegate 变量和event. 当然也可以明确的指明Add/remove方... 阅读全文
C# Delegates And Events in Depth[翻译加笔记]【Event】【2】
2011-08-15 06:52 by 一一九九, 388 阅读, 收藏,
摘要:
http://www.ikriv.com/en/prog/info/dotnet/Delegates.html Events 概念上, Event是一对方法: Add accessor 和Remove accessor. 每一个方法都接受一个具体的Delegate Type的参数。Add accessor 通过 “e+ = d”来调用,remove accessor 通过 “e-=d”来调用。 ... 阅读全文
C# Delegates And Events in Depth[翻译加笔记]【Delegate】【1】
2011-08-14 22:53 by 一一九九, 334 阅读, 收藏,
摘要:
http://www.ikriv.com/en/prog/info/dotnet/Delegates.html 这篇文章涉及的主题主要有如下几点: class delegate class multicastDelegate Field-like events event accessors Virtual events Delegate class 任何一个Delegate Object 都是... 阅读全文
为什么不能在Event所在Class外部判断Event是否存在?
2011-08-14 17:23 by 一一九九, 474 阅读, 收藏,
摘要:
这个是因为在Delphi转C#的过程中,一个同事提出来的问题,想先判断一下某个Class是否存在某个Event,如果不存在则创建自己Handler, 如果存在则执行Class内部的委托。在写 XXClass.XXXEvent != null, 发现出现了一个错误,说是Event只能执行+, –操作。 在StackOverFlow上找到了相关的解决方法: http://stackoverflow... 阅读全文
NHibernate in Action Ch3 PoCOs
2011-08-11 07:07 by 一一九九, 228 阅读, 收藏,
摘要:
本章开始介绍了一个CaveatEmptor的例子,数据关系大体上如下所示,作者在后面介绍Mapping的时候没有具体的示例或者Step by Step, 所以需要对这张图有所掌握,自己写出来相应的代码。 3.2 implementing the domain model 作者在这里提到当实现一个领域模型的时候需要考虑的几件事情,比如说: how do you separate the busi... 阅读全文
How to inherit constructors?
2011-08-02 16:34 by 一一九九, 227 阅读, 收藏,
摘要:
from: http://stackoverflow.com/questions/223058/how-to-inherit-constructors 问题大体如下: 假设有一个基类:public class Foo{ ... public Foo() {...} public Foo(int i) {...} ... public virtual void SomethingElse() {..... 阅读全文
Diference between referencing a existing project and the compiled dll
2011-08-02 07:04 by 一一九九, 200 阅读, 收藏,
摘要:
From http://social.msdn.microsoft.com/Forums/en-US/csharpide/thread/c642db00-4ae2-4567-94c0-9a83ebcad294 原文: Project references are preferable to binary references (the DLL) in almost all cases. At ru... 阅读全文