最新评论
@iceboundrock
額。悲劇啊。確實是這樣的…
看來似乎只能在發布事件的class裡寫個方法做清除了
Re:使用反射清除所有挂在事件上的delegate iceboundrock 2011-01-31 08:13
@夕月
可能您会失望,这个方法在2.0sp1以后就失效了
很精彩!
目前進行的一個項目中事件非常多,簡單的事件都用Lambda表達式搞了,沒辦法用-=操作符。
這個方法真是非常有用!
Re:异步I/O模型 辰 2009-11-10 03:51
lz是不是加入了ms之后,把大部分ncindy文章删了。。
Re:DSS简介 iceboundrock 2009-10-24 14:37
@SweetBox
曾经做过,现在已经离开了
Re:DSS简介 SweetBox 2009-10-23 21:50
博主,移动做飞信的开发?我在飞信看到个NCindy.dll,觉的眼熟,就找到园里来了
不知道为什么,我加上去了,没有用,不明白了.
FieldInfo fi =
36 ei.DeclaringType.GetField(ei.Name,
37 BindingFlags.NonPublic |
38 BindingFlags.Instance);
39 if (fi != null)
40 {
FI从来一直等于null
re: Windbg点滴 ysinchina 2009-05-26 14:45
期待....................
MySql.Data.msi 是个安装包 哥哥 怎么解压呀
“复制C:\MySQL_VS\Visual Studio Integration目录到C:\Program Files\MySQL\MySQL Connector Net 5.2.0目录 ” 这话真的很费解。。。。
re: C++对象的构造、赋值和析构 Andrew_Z 2008-11-26 14:34
其实我认为是这样的:最后那个Enter Demo dector. method, i = 1, objName = copied d并不是真正的copy构造函数产生的copied d,而是main函数中第一个声明的d。
之所以会这样是因为copy函数的原因(如同二楼所说)。copy函数复制的是"="号后面的函数返回的对象。之所以这样做,是因为testMethod1退出后局部变量将被销毁,于是“=”前面要赋值的对象得不到正确的结果。于是,C++利用copy函数将其复制了一份。
在默认的copy函数中,对于指针类的成员变量也是相同复制,这样做肯定会出问题。但是,楼主重载了copy函数,但还是没有解决这个问题。因为楼主在copy函数中将objName = "copied d"这就是说凡是赋值的对象的到的objName都是"copied d",这并不是楼主想要的。如果将该copy函数中的objName变量赋值为函数参数中d的成员变量objName的值,应该能得到正确结果。
re: 异步I/O模型 Jerry Qian 2008-11-17 17:07
麻烦把代码也给我发一份.jciwolf#126.com
re: .NET Sockets I/O模型 Jerry Qian 2008-11-17 14:45
看不懂啊.长的代码应该总浓缩下流程.
我今天装了个最新的5.2.4
也遇到这个问题,但codeBase没有发现多\啊
首先执行一条命令:msiexec /a MySql.Data.msi /qb TARGETDIR="C:\MySQL_VS",将安装包解压到C:\MySQL_VS目录中,然后复制C:\MySQL_VS\Visual Studio Integration目录到C:\Program Files\MySQL\MySQL Connector Net 5.2.0目录
一定需要执行这段操作么?
re: P2P程序实验网络 shawnliu 2008-09-24 19:56
--引用--------------------------------------------------
idior: 你觉得这样一张图放首页合适吗?
--------------------------------------------------------
han 这玩意很大原因在于cnblogs自身吧
re: 并行与并发编程学习心得 shawnliu 2008-09-24 19:54
lz在这方面研究的不错
re: 并发程序设计探索 陈晨 2008-08-28 16:25
感觉楼主所有的异步要硬件支持才行
而我们平时所使用的异步方式,如delegate是用线程模拟的,这样的多线程和异步在性能上有什么差别吗?
请指教,谢谢
re: C++对象的构造、赋值和析构 yurlove 2008-08-12 09:54
楼上的正解,类还有一个默认的赋值函数!~
re: 任务调度 iceboundrock 2008-06-26 00:57
其实这个系列并没有翻译完成,所以我也没有公开发布到首页。sorry,我会找时间翻译完的。
re: 任务调度 熊掌 2008-06-25 23:53
策略场景没有发出来啊,是不是丢失了!!
re: CCR用户指南 熊掌 2008-06-25 23:14
不错,有个中文翻译的对照着英文的看,速度快些。
多谢博主的幸苦工作。
请教个问题,该如果判断已经超时呀,如果使用系统TickCount,好像这个只能表示24天左右吧,系统开机时间超过24天就出现问题了,如果使用DateTime.Now存储时间,用户可能修改服务器时钟,好像也不行;有没有比较好的方法呀?
@颖之守翼
也许,不过请注意Create方法的参数,其实这个参数已经决定了反序列化的结果。
Create是成员方法的原因,我想应该是为了让EndPoint派生类继承这个方法。
interface的成员不能是static的
static的成员不能用virtual, override 和 abstract修饰。
所以M$为了让所有的EndPoint派生类都实现Create方法,就声明了一个成员方法。
而且考虑static method的调用方法,必须是类名.方法名,这样会使得代码里必须指定你使用的具体的EndPoint派生类。若是将来突然发现IPEndPoint不够用了,需要从它派生出一个新的EndPoint类;或者要放弃TCP/IP协议,换用其他的协议;更极端地,如果程序对所处的网络不确定,需要从外部获取一个EndPoint的派生类的对象来做网络操作……
所以,其实M$这样设计还是有道理的。
re: .NET高效网络编程——提纲和Mindmap Linker M Lin 2007-10-10 22:19
很喜欢MindJet的思维导图.
什么时候可以看到文章啊,期待中...
re: (备忘)在Linux下动态调用so中的函数 iceboundrock 2007-08-11 15:38
我们可以使用ldd命令来输出一个可执行程序的依赖,这是个非常有用的命令。
可以使用whereis命令来查看一个文件的所在地。
探讨得很深入,学习后收获多多。
不过我的意见是:“objName = copied d 的对象被析构两次,objName = Default obj 的对象被构造出之后没有被析构”是不对的,对于d = testMethod1();这条语句,d对象还是原来的内存空间,只是它执行了编译器默认的赋值操作,由于这个默认的赋值只是位拷贝(也就是成员的逐个赋值),将指针的值也是简单复制,于是这两个对象的objName指向相同的字符串地址。
于是d对象析构的时候,打印的objName是“objName = copied d”。出现内存泄漏的原因是你的Demo类中的objName,但又没有提供相应完整的拷贝,赋值,析构。
re: 使用反射清除所有挂在事件上的delegate 张小峰 程序员的原创吉他谱天地 www.gtp.cn 2007-03-24 11:08
不错,收藏了
re: 使用反射清除所有挂在事件上的delegate iceboundrock 2007-03-24 09:35
@Changhong
呵呵,那反射调用private方法也是一个feature嘛。
你说我设计的不好也罢如何如何也罢,我写出这样的函数因为我的确有这样的需求这么做。
我知道比较合理的方式是在class里面写个virtual public方法来清理这些events,问题是遗留代码已经太庞大了。逐个修改是很大的工作量,如果增加这样的一个助手方法会轻松很多。
调用一个private方法在理论上的确不好,不过有时候没办法,比如WSAAsyncSelect函数其实在.net里面内置了实现,是internal的,这个时候你只有两种选择,要么重新实现,要么用Reflection调用,重新实现牵涉到东西太多,我还是选择了后者。
You have to understand why 一个event在声明它的class之外只能使用+=/-=操作符进行delegate的增减. That is a feature, not a 不方便之处. You are NOT supposed to do any operations other than +=/-= on an event out side the event's class defintion. You idea is something like "how to evoke a private method out side of the class defintion".
re: 使用反射清除所有挂在事件上的delegate iceboundrock 2007-03-23 23:26
@双鱼座
为啥呢?比如说什么bugs?
re: 使用反射清除所有挂在事件上的delegate reonlyrun 2007-03-23 19:54
收藏
不错!
动态语言的灵活性确实是非常的高!
IronPython可以方便的和C#这种静态语言结合,是在是前途无量啊。
@Guest
ooooo,知道我最不想听到的话是什么吗?就是你说的这段!充满了指责但是毫无建设性,甚至根本不提任何论据。难到MS就没有设计错过?ok,如果设计很完美,为啥会有那么多类/方法被deprecated?
你认为MS的设计就一定是正确的设计,有人觉得那个设计错了只是因为他的理解不深刻或者思考不全面?听听,多么象皇帝新衣里面那个伟大的裁缝的话啊。
当然,MS的设计可能真的是正确的,但是在我认为他是正确的之前,我需要充足的理由,而不是因为他是MS设计的我就认为他一定是正确的。
很多东西在你还没深入时,你觉得是没必要的,但是当你遇到更多问题时,你会发现M$做得是有道理的,任何问题不能只以你自己的角度去思考
re: 使用NCindy编写一个Http服务器 iceboundrock 2007-01-04 15:06
@李嘉
不是吧,我用WAS压的时候,这个程序的性能可以达到IIS的80%。
也许是我的测试服务器性能不够,没有办法发挥IIS 6的全部威力。
@Dominic
第一,.net vm内部的string对象都是unicode编码,而Windows API接收的编码只有两种,分别在API的后缀有A和W来标记到底接收ASCII还是Unicode。
第二,IOControl的作用是为Socket设定参数选项的。我的想法是,增加一种IOControl的重载,接收一个选项接口。有多个选项类,实现选项接口。每种选项类封装一组IOControl所需的参数组,传递给IOControl。
第三,有封装只能说明原来的API使用不方便,不能说明原有的方法设计没有问题。
问一个问题:最后网络接口方便是怎么操作的呢?让.net框架自己转换string 到byte[]么?还要自己判断是否unicode?UTF8? GB2312?等等字符集么?
之后当OS的底层网络接口全部用.Net 实现之后才能像你说的那样做。这样看来microsoft目前这样做还是有道理的。
其实有很多封装类和控件的,没有人强迫你一定的用自带的IOControl 函数。
@James[匿名]
这个理由太牵强了点吧,如果Winsock更新了,很多程序都得改。
最起码,你初始化的时候就不能再用2.2版本来初始化Winsock库了吧。
多改这一处又如何啊?
另外,Winsock的error code,现在不也被封装成异常了?而且不同的error code有不同的异常描述,按照你的说法,这个举动岂不是耦合性更强?