资源预览内容
第1页 / 共19页
第2页 / 共19页
第3页 / 共19页
第4页 / 共19页
第5页 / 共19页
第6页 / 共19页
第7页 / 共19页
第8页 / 共19页
第9页 / 共19页
第10页 / 共19页
亲,该文档总共19页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
再探C#类与结构体究竟谁快考虑栈变量、栈分配、64位整数、密封类 上次我对C#类与结构体做了一次速度评测(http:/blog.csdn.net/zyl910/article/details/6788417)。经过一段时间思索,发现还可以进一步探讨第一、栈变量。上次的“硬编码”,是访问类中的静态变量的。若改为访问函数中的栈变量,性能会不会有所提高?第二、栈分配(stackalloc)。既然要测试栈变量,我们还可以顺便测试一下在栈上分配的内存块的访问性能。第三、64位整数。由于32位系统的成功,我们已经习惯了使用32位整数(int)。现在64位系统逐渐普及,我们得为此做好准备。对于指针操作时经常要用到的偏移量增减运算来说,是使用32位整数,还是使用64位整数,或写两套代码?这需要测试后才能决定。第四、密封类(sealed)。听说密封类能提高性能,我们可以测试一下。有两种测试方式,一是为原来的派生类增加sealed关键字,二是专门另外写一个密封类。我决定同时使用这两种方法,分别测试其性能。一、测试代码测试代码如下?123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525using System; using System.Collections.Generic; using System.Text; using System.Diagnostics; namespace TryPointerCall / / 指针操作接口 / public interface IPointerCall / / 指针操作 / / 源指针 / 修改后指针 unsafe byte* Ptr(byte* p); #region 非泛型 / / 非泛型 指针操作基类 / public abstract class PointerCall : IPointerCall public abstract unsafe byte* Ptr(byte* p); / / 非泛型 指针操作派生类: 指针+偏移 / public sealed class PointerCallAdd : PointerCall / / 偏移值 / public int Offset = 0; public override unsafe byte* Ptr(byte* p) return unchecked(p + Offset); / / 非泛型 指针操作密封类: 指针+偏移 / public sealed class SldPointerCallAdd : IPointerCall / / 偏移值 / public int Offset = 0; public unsafe byte* Ptr(byte* p) return unchecked(p + Offset); / / 非泛型 指针操作结构体: 指针+偏移 / public struct SPointerCallAdd : IPointerCall / / 偏移值 / public int Offset; public unsafe byte* Ptr(byte* p) return unchecked(p + Offset); #endregion #region 泛型 / ! C#不支持将整数类型作为泛型约束 ! /public abstract cla
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号