所谓的临时解决问题,只不过是因为内存分配失败后,没有尝试再次分配而已。如果你在catch block中先调用gc.collect,然后再去重新执行导致问题的代码请求内存,就可以看到是否gc.collect有用了
当发生OOM后,正确的做法是failfast,尽快结束进程。避免由于OOM带来数据损坏等更严重的损失。使用catch去抓OOM,然后尝试恢复,是错误的做法
最好不要这样做
在server side比如IIS和ASP.NET使用Office Automation官方不支持,容易发生安全问题和死锁
re: Wcf 调用 web 服务造成的内存泄露 lixiong 2008-01-10 14:32
......
我考,搞来搞去还是这个问题
出版社控制的进度,我也没办法。现在china-pub已经可以买了
你可以用
.reload -f -i module.dll
命令来强制加载pdb文件,哪怕mismatch
503好像是Server too busy吧。。。
re: .NET 环境下运行时代码生成和编译 lixiong 2007-11-22 02:01
慢到不是问题。跟数据库操作比,这个开销小很多数量级
最怕的是动态编译导致的内存分片,这个就很郁闷了。
CLR的CodeDom技术无法在生产环境中广泛应用的根源就在这里。这也是为何ASP.NET需要支持batchCompilation的原因
re: 《Windows用户态程序高效排错》 lixiong 2007-11-13 13:37
你自己可以写windbg extention来扩展windbg的命令和功能的
re: 《Windows用户态程序高效排错》 lixiong 2007-11-12 17:23
这个月末
原来是一个第三方的CLR优化工具。要花钱的俄。。。这个平时干活就不能用。再说手动分析也要放心点,所以我从来都不用!analyze命令,书中也没说这个命令
正文中关于/3GB的东西结构上有点变化,不过这个不是书中的重点
antsprofiler我好像也不知道是啥,找找看
@Jeffrey Zhao
就是前面发给你看那个阿。你比较下目录就知道纸书的差别
1. 大多数的.net程序是服务器端的。比如asp.net, remoting, web service。这种程序是无法拿到assembly做reflection的
2. reflection是双刃剑。好处多于坏处。简单的例子是,异常发生后可以打出callstack。这就是assembly带类型的功劳的。在提高开发效率,排错等方面带来的好处更多
3. 关键部门的代码,如果要保护,可以用C++完成,然后用pinvoke/com interop调用
re: 托管代码和非托管代码效率的对比。 lixiong 2006-12-07 15:25
非常有趣的问题
今天在公司内部讨论了一把,中间可以学到不少东西的。改天有时间整理出来
@iceboundrock
天天被客户逼,没办法就摸索出来了
@Newer
我对shell开发不熟悉,但是换成我,我也会这样设断点进行跟踪的
re: 看到一个粗制滥造的程序所感 lixiong 2006-10-26 12:52
烂代码的cost低阿
re: IE的leak lixiong 2006-10-25 15:11
@yi
我在IE7上用你说的方法测试过,内存使用没有任何改善。
你是在什么版本上测试的呢?测试用的代码是上文中的html吗?你是如何观测内存使用的?最小化,最大化具体操作的时候需要注意什么吗?
re: IE的leak lixiong 2006-10-25 00:05
记忆中vadump一般用来分析dump中heap/dll/virtual space等各种资源占用的内存比例,而umdh是用来检查pageheap的stack trace
两者用途不一样的
其实后面要介绍的iis diagnose工具完全可以代替命令行的vadump
哦?什么问题啊,dudu没在msn上给我说啊
有啥问题能帮忙的尽管告诉我
着这个,我今天正在写如何解决memory leak的文档,提纲如下:
Guide line
Cache/leak/load/design/recycle
Memory leak
Private bytes leak
Heap leak
Heap fragmenation
Virtual allocate
Virtual space leak
Space fragmentation
Pageheap trace
IIS debugdiag
Handle leak
GDI leak
Other:
Power of IIS Debugdiag
BSTR cache
re: 模态窗口被IE 7给糟蹋得不成样子了 lixiong 2006-10-21 12:01
有什么不好看么?我觉得挺好的,早就应该这样了
我最怕ie出模态窗口
re: 最近确实因dotnet给郁闷了一下 lixiong 2006-09-28 14:26
明明知道环境因素如此,为何还要用.net 2.0呢?用asp不久什么都搞定了
re: 为什么java+winform就那么慢呢 lixiong 2006-09-19 15:53
reflector 就是典型的winform
还有现在流行的rss reader,好多都是.net winform
抓dump的步骤在debug paper里面有的
用adplus:
adplus -hang -iis -quiet -q -o c:\dumps
search keywords: adplus hang kb
re: .net 通用计算库 lixiong 2006-09-18 19:45
搂主强的
我来测试一下
"你说说printf是怎么实现的,这人就没方向了,其实就是一个很简单的BIOS INT"
No. it's not a simple BIOS INT in Win32. In fact, it's a call to WriteFile API to standard device output :)
let me have a try:
Thread和Process之间有什么区别?.NET新引入了Application Domain的概念,这样他们三个之间有什么区别?引入了Application Domain会带来一些潜在的问题么?
Process is OS resource boundary. Thread is execution identity. AppDomain the logic resource boundary for CLR code and resource. Potential issue may occur when there is confliction with CLR boundary and OS resource boundary, such like assembly unloading.
Windows Service与普通的EXE在执行过程中有什么区别?
Service starts before user login, and has its own desktop/session
一个进程可以访问的Windows地址空间有多大?等于系统的虚拟内存大小么?这两方面将对系统的设计产生什么样的影响?
2GB user mode, 2GB kernel mode. You may apply /3gb option
EXE和DLL之间的区别是什么?在系统设计中应该如何选择使用它们?
In fact, there is no difference
普通的EXE与.NET EXE的执行过程有什么不同?
CLR binary needs be jitted before execution, and maintained bu CLR. While EXE contains binary code and executes directly.
什么是弱类型,什么是强类型?在系统设计中应该首先考虑使用哪种类型?
Strong type
PDB文件是作什么用的?里面包含了什么信息?
Debug symbol
Cyclomatic Complexity是什么?为什么它很重要?
sorry I do not know
为创建一个critical section以访问某个变量书写一个标准的lock() 并加上double check。
what's double check? You just need to create criticalsection, enter and leave.
为某个对象实现标准的Dispose模式。
is it necessary?
什么是FullTrust? 存在于GAC中的 assembly 拥有FullTrust么?
FullTrust means any permission request will be met for the callee. I do not think strongnamed assembly in GAC has FullTrust. You can adjust it.
下面这个命令是做什么的?gacutil /l | find /i “system”
Not sure. Find assemblies in GAC with system keyword?
下面这个命令是作什么的? sn -t something.dll
Display strong signed signature?
跨防火墙的 DCOM必须打开哪个端口?端口135是用来做什么的?
RPC endpoint mapper
有什么办法可以与现有unmanaged code集成?在集成的时候应该考虑什么问题?
COM Interop/PInvoke. Mashral
简要解释一下OOP与SOA都是用来作什么的?
oh, a long stroy
XmlSerializer是如何工作的?进程运行XmlSerializer时候需要什么样的ACL权限?
which level?
在系统设计时,何时应该使用try catch?何时需要避免使用?
the callee may throw exception, you need to put it in try/catch block.
Debug.Write()和Trace.Write()之间有什么区别?二者分别应该用于何处?
er.. not sure
Debug Build和Release Build有什么区别?在执行效率上有什么明显的区别么?
native build or CLR build? For clr build, there is no explict difference, except ASP.NET :)
JIT是针对Assembly还是Method发生的?解释一下为什么.NET的设计者要这样做?
Method. For performance
简要描述一下GC的执行过程。
mark phrase, collect phrase, compact and move phrase, finalize phrase
应该如何选择使用abstract class还是interface?
do not ask me design info
在设计一个自定义类型时应如何选择使用Value Type还是Reference Type?
oh, depends on your...
对于Value Type和Reference Type,a.Equals(b)的默认实现方式有什么不同?
default implementation?
.NET中为什么不提供默认的deep copy?如果需要,要如何实现deep copy?
Clone?
相对于.NET 1.1,.NET2.0为了避免过度的boxing/unboxing造成的系统开销提供了哪些支持?
in fact, I never see any perfomrance issue caused by boxing. I do not think the improvment is great.
String是Value Type还是Reference Type?为什么.NET中的String对象被设置成immutable?
i do not know. But the behaviro likes value type, but defined as ref type? because string is common basic type like int, char...
re: 退一步海阔天空——不算结局的结局 lixiong 2006-09-11 22:17
从两边的评论就可以看明白高下。你没有必要在某些无聊评论身上浪费时间。
其实本来是两个人的事情,虽然不尊重知识产权,但是双方好歹都尊重技术,大家都奉献过。只是有些无聊的人,从来不曾为社区贡献过什么,只知道煽风点火,辱骂诽谤。
你应该收苏的钱,而且要给他收据,同时要保存他的书面道歉。这样1表示接受了道歉,2来以后如果需要回头看这个事情,你也有证据。这是对双方,也是对大家的交待。只有这样整个事情才算解决。
如果你还是有点不甘心,我支持你删除整个blog
让大家看到,伤害创造者的结果,就是扼杀分享技术的热情。损害了所有人的利益。以后大家都别玩了,想抄都没有了,自个去编吧
大家以后要写什么东西,要么就写点自己才看得懂的,不枉费自己研究一场。如果要想share点什么东西,要学会保护自己。
名利是不是没有的,但是取之有道,用之有道
re: ASP.NET 2.0 X64的奇怪问题 lixiong 2006-08-22 23:39
首先,是否能确认high cpu是由于app recycle导致的。
我的建议是:
1. 在high CPU的时候,用x64的windbg抓几个dump
2. 观察内存使用。当内存比较高,比如超过800MB的时候,抓一个dump
3. 使用performance monitor监视cpu和其他使用情况。
dudu有兴趣的话msn上说
"
2.内存移动
如果在CLR中需要传递一块托管的buffer到非托管API,以便非托管API可以异步地向这个buffer填充数据。但是开发人员忘记用C#中的fixed关键字和或者MC++中的__pin关键字pin住这个object,那么GC发生的时候buffer就可能被GC移动导致地址发生改变。当非托管API试图写入旧地址的时候,好的情况就是发生crash,坏的情况就是不知道损坏了一块什么样的数据,最后崩溃到CLR的某个内部函数上,或者产生一个ExecutionEngineException。这种问题虽然是开发人员的错,但是调试起来非常头疼。因为问题不会立刻暴露出来,从callstack上也看不出任何线索,问题还不容易重现,每次出错的地方还不一样。这是由于CLR增加OS上的另一层内存管理机制,本意是减少开发人员的开销,但结果却使得开发人员要考虑更多的因素。同样类型的问题还会出现在COM object的使用上。如果COM指针在托管代码和非托管代码之间传递多次,由于某个非托管代码的错误,导致引用计数被多减了一次,使得指针在CLR不知情的情况下提前释放。最后CLR操作COM的时候CLR可能就会崩溃。解决这类问题单通过检查dump很难找出根源,一定要有一个重现环境,配合CLR的stresslog来调试。
"
re: 关于线程池的文章 lixiong 2006-08-22 00:16
The official doc about the correct setting and explanation about clr threadpool:
Contention, poor performance, and deadlocks when you make Web service requests from ASP.NET applications
http://support.microsoft.com/?id=821268
re: 又见怪异编码问题,忘知情人士前来解围 lixiong 2006-08-18 13:30
gb2312字符集包括繁文
我想是的 :)
re: 《Windows用户态程序高效排错》 lixiong 2006-08-17 16:40
re: 《Windows用户态程序高效排错》 lixiong 2006-08-17 12:10
不会吧,明明就是zip,打开解压不就可以了
re: 《Windows用户态程序高效排错》 lixiong 2006-08-13 22:53
谢谢你的反馈
我会找时间仔细检查