c# 反编译对比(旧)

前言

旧的都是我以前博客的迁移。

我们写代码有时候遇到一些问题,或者我们想优化我们的代码,我们想要看编译后的运行情况,那么反编译是必须要做的一件事。

正文

在此我自己使用的是reflector和ILSpy,为什么使用这两种呢?

我们知道第一种reflector是收费的,但是我们有时候在不得已的情况下还是要用的。

c# 反编译对比(旧)

为什么我说不得已的情况下用呢?因为有时候ILspy 反编译不出来。

c# 反编译对比(旧)

对比

因为反编译工具的不同,那么编译出来的东西差别还是有的。

下面是相同代码反编译下的情况。

reflector

private static void Main(string[] args)
{
    CacheItemPolicy policy = new CacheItemPolicy {
        RemovedCallback = arguments => Console.WriteLine($"缓存被移除的原因:{arguments.RemovedReason}"),
        SlidingExpiration = TimeSpan.FromSeconds(5.0),
        Priority = CacheItemPriority.NotRemovable
    };
    MemoryCache.Default.Add("mykey", "myvalue", policy, null);
    Console.WriteLine(MemoryCache.Default.Get("mykey", null));
    Thread.Sleep(0x1770);
    Console.WriteLine(MemoryCache.Default.Get("mykey", null));
    Console.ReadKey();
}

ILSpy

private static void Main(string[] args)
{
    CacheItemPolicy policy = new CacheItemPolicy {
        RemovedCallback = arguments => Console.WriteLine($"缓存被移除的原因:{arguments.RemovedReason}"),
        SlidingExpiration = TimeSpan.FromSeconds(5.0),
        Priority = CacheItemPriority.NotRemovable
    };
    MemoryCache.Default.Add("mykey", "myvalue", policy, null);
    Console.WriteLine(MemoryCache.Default.Get("mykey", null));
    Thread.Sleep(0x1770);
    Console.WriteLine(MemoryCache.Default.Get("mykey", null));
    Console.ReadKey();
}

虽然细微的差别,但是我们用人脑去看多种反编译还是痛苦的,所以选择一两种反编译工具即可,不要经常换。最好熟悉relector,收费总是有收费的理由的,有钱的话可以买一份支持下。
对了,在此提醒一下ILSpy 免费的,直接去github下载,不要搞野生,版本可能低一些。

上一篇:只要动手就能学到东西5 看似很简单的东西也会碰到意想不到的问题


下一篇:web项目由http升级https