我过去常常喜欢Reflector,但自RedGate接手以来,它已经大幅下滑.现在它迫使我更新(这绝对是荒谬的),有一半时间更新不顺利,而且每次更新都会越来越妨碍我的工作效率.我厌倦了,我准备好了更好的东西.有人知道更好的反汇编吗?
更新:
答案中提到的各种替代品清单 -
这是我作为一个经验不足的程序员经常遇到的情况,我特别想知道我正在努力优化的一个雄心勃勃,速度密集的项目.对于主要的类C语言(C,objC,C++,Java,C#等)及其常用的编译器,这两个函数是否同样有效运行?编译代码有什么区别吗?
void foo1(bool flag)
{
if (flag)
{
//Do stuff
return;
}
//Do different stuff
}
void foo2(bool flag)
{
if (flag)
{
//Do stuff
}
else
{
//Do different stuff
}
}
Run Code Online (Sandbox Code Playgroud)
基本上,是否有提前break
或return
早期的直接效率奖金/罚款?堆栈框架是如何涉及的?是否有优化的特殊情况?是否有任何因素(如内联或"Do stuff"的大小)可能会对此产生重大影响?
我总是支持改进可读性而非次要优化(我通过参数验证看到foo1很多),但这种情况经常发生,我想一劳永逸地抛开所有的担忧.
而且我知道过早优化的陷阱......呃,这些都是一些痛苦的回忆.
编辑:我接受了答案,但EJP的答案非常简洁地解释了为什么使用a return
几乎可以忽略不计(在汇编中,return
在函数末尾创建一个'分支',这非常快.分支改变了PC寄存器和也可能会影响缓存和管道,这是非常小的.)特别是对于这种情况,它实际上没有区别,因为它们if/else
和return
函数末尾都创建了相同的分支.
可能重复:
比.NET Reflector更好的东西?
可能重复:
反射器的开源替代品?我不认为这是重复的,因为其他问题的联系是关于学习反射器如何工作,这个问题是关于当反射器停止自由时的应对
现在Red-Gate已经说过.NET Reflector将不再是免费的,是否有一种替代方案可以节省获得批准采购订单的痛苦?
好消息是,我们正在准备一个独立的二进制源代码应用程序,即反编译器+汇编浏览器,以探索任何.NET编译代码合法探索的内容.我们没有任何具体的发布日期,但它将在今年发布,而且它将是免费的.通过说"自由",我们实际上意味着"自由".
此外ilspy是一个新的开源工具,它似乎正在取得良好进展.ILSpy是开源.NET程序集浏览器和反编译器.
Red Gate宣布.NET Reflector的免费版本将于2011年2月底停止存在之后开始开发.
MVC4的来源是否可用?我搜索过codeplex和所有常用的地方,但似乎无法找到?MS是否一直保密到最后?他们为什么要那样做?
我正在编写一个工具来报告有关在我的客户端系统中的环境和区域部署的.NET应用程序的信息.
我想阅读这些程序集中的程序集属性的值.
这可以使用Assembly.ReflectionOnlyLoad
,但是即使这种方法也可以保持装配.这里的问题是我无法从不同的路径加载两个具有相同名称的程序集,因此我无法比较在不同系统中部署的相同应用程序.
在这一点上,我假设解决方案将涉及使用临时AppDomain
s.
有人可以详细说明如何将程序集加载到另一个程序集中AppDomain
,从中读取属性然后卸载AppDomain
?
这需要适用于文件系统上的程序集以及URL地址上的程序集.
我已经在我的机器上部署了一个ASP.NET MVC 3应用程序到共享主机提供程序,并且发现了一些似乎与正在回收的应用程序池相关的问题.主机已配置在以下任何情况下进行回收:
我的开发机器上的限制更加轻松,所以在开发过程中我没有看到像这样的回收.我没有管理员访问共享主机盒(可以理解),所以我无法阅读事件日志,看看为什么这种回收正在发生.
有没有办法可以找出为什么我的应用程序被回收(Application_End
例如),以便我可以记录它来帮助我的调试?
我想知道是否有人可以向我解释一下编译器可能正在为我做些什么来观察一个简单方法的性能差异.
public static uint CalculateCheckSum(string str) {
char[] charArray = str.ToCharArray();
uint checkSum = 0;
foreach (char c in charArray) {
checkSum += c;
}
return checkSum % 256;
}
Run Code Online (Sandbox Code Playgroud)
我正在与一位同事一起为消息处理应用程序做一些基准测试/优化.在Visual Studio 2012中使用相同的输入字符串执行此功能的1000万次迭代大约需要25秒,但是当使用"优化代码"选项构建项目时,打开相同的代码,在7秒内执行相同的1000万次迭代.
我非常有兴趣了解编译器在幕后做了什么,以便能够看到像这样看似无辜的代码块的性能提升超过3倍.
根据要求,这是一个完整的控制台应用程序,演示我所看到的.
class Program
{
public static uint CalculateCheckSum(string str)
{
char[] charArray = str.ToCharArray();
uint checkSum = 0;
foreach (char c in charArray)
{
checkSum += c;
}
return checkSum % 256;
}
static void Main(string[] args)
{
string stringToCount = "8=FIX.4.29=15135=D49=SFS56=TOMW34=11752=20101201-03:03:03.2321=DEMO=DG00121=155=IBM54=138=10040=160=20101201-03:03:03.23244=10.059=0100=ARCA10=246";
Stopwatch stopwatch = Stopwatch.StartNew(); …
Run Code Online (Sandbox Code Playgroud) 可能重复:
反射器的开源替代品?
自3月份以来,即使对于所有旧版本,此工具也不再免费.任何替代品?
当我第一次安装.NET Reflector时,它就像解压缩一样容易,将文件夹拖到磁盘上的适当位置并启动它.在UI中,我能够配置诸如Windows资源管理器和Visual Studio集成之类的东西.这一切都很好,我广泛使用它.
现在,我不能再使用它了,因为Red Gate决定不仅开始为其软件的新版本收费,而且还要锁定所有现有版本.我对此的个人感受促使我不要升级到最新版本,事实上,根本不使用任何Red Gate软件.幸运的是,有很多很棒的免费和/或开源替代品 ; 我会选择其中一个.
问题是我无法弄清楚如何从我的PC中完全消除Reflector的所有痕迹.我需要能够打开软件,以便在我从磁盘上盲目删除文件夹之前,我可以要求它从Explorer和Visual Studio中删除它.但我不能这样做,因为我不愿意为此付费或下载新版本.相反,我得到了这个无益且现在不准确的消息:
是的,我可能会删除可执行文件,然后在注册表中自行删除shell集成和所有关联.但我宁愿不这样做.该软件应该像我所有其他软件一样为我提供一种删除它的方法,特别是现在它不再是免费的.
那是什么意思?下载试用版只是为了让我可以删除它不是一个合理的选择.
在整个网站中,我经常看到人们用这样的答案回答问题,"因为编译器用[其他东西]替换[东西]",所以我的问题是,人们如何知道/学习这个?我在哪里可以学到这些东西?
.net ×5
c# ×4
reflector ×4
appdomain ×1
asp.net ×1
asp.net-mvc ×1
assemblies ×1
c ×1
c++ ×1
iis ×1
iis-7 ×1
java ×1
open-source ×1
redgate ×1
windows ×1