我在Stack Overflow上看到了一些这样的提及,但是盯着维基百科(相关页面已被删除),并且在一个MFC动态对话框演示中没有任何启发我.有人可以解释一下吗?学习一个根本不同的概念听起来不错.
根据答案:我认为我对此有了更好的感受.我想我第一次没有仔细查看源代码.在这一点上,我对差异执行情有不同的看法.一方面,它可以使某些任务变得相当容易.另一方面,启动并运行(即,用您选择的语言设置)并不容易(我确信如果我更好地理解它)...虽然我猜它的工具箱只需要制作一次,然后根据需要进行扩展.我认为为了真正理解它,我可能需要尝试用另一种语言实现它.
language-agnostic model-view-controller differential-execution
正如Knuth所说,
我们应该忘记小的效率,大约97%的时间说:过早的优化是所有邪恶的根源.
这是Stack Overflow常常出现的问题,例如"哪个是最有效的循环机制","SQL优化技术?"等问题.(等等).这些优化提示问题的标准答案是分析您的代码并首先查看它是否是一个问题,如果不是,那么您的新技术就不再需要了.
我的问题是,如果某种技术不同但不是特别模糊或混淆,那真的可以被认为是过早的优化吗?
这是Randall Hyde的一篇名为"过早优化的谬误"的相关文章.
如今优化似乎是一种迷失的艺术.所有程序员都没有从代码中挤出每一盎司的效率吗?经常在雪地里行走五英里的时候这样做?
本着回归丢失的艺术的精神,您知道的简单(或复杂)变化以优化C#/ .NET代码的一些提示是什么?因为它是如此广泛,取决于一个人想要完成什么,它有助于提供你的提示的背景.例如:
StringBuilder.请参阅底部的链接以了解相关信息.string.Compare两个字符串比较,而不是做这样的事情string1.ToLower() == string2.ToLower()到目前为止,普遍的共识似乎是衡量关键.这种方式忽略了这一点:测量不会告诉你什么是错的,或者如果遇到瓶颈会怎么做.我遇到了字符串连接瓶颈一次,不知道该怎么办,所以这些提示很有用.
我甚至发布这个问题的意思是为了解决常见的瓶颈问题,以及在遇到这些问题之前如何避免它们.它甚至不一定是任何人应该盲目遵循的即插即用代码,而是更多关于获得对性能应该被考虑的理解,至少在某种程度上,并且需要注意一些常见的陷阱.
我可以看到,知道为什么提示有用以及应该应用的位置可能会有用.对于StringBuilder小费,我找到了很久以前在Jon Skeet网站上做过的帮助.
在Java VisualVM中,有没有办法显示总方法时间,而不是"自我时间"?(后者并不是特别有用,因为它没有告诉你任何方法实际运行的时间.)
如果没有,是否有任何独立的免费Java分析器可以计算总方法时间?
我已经看到了建议的编码标准Never use goto unless in a switch statement fall-through.
我不跟随.这个"例外"案件究竟是什么样的,这证明了一个goto?
我已经厌倦了每隔一天必须学习另一个Java Web框架.
JSP,Struts,Wicket,JSF,JBoss Seam,Spring MVC仅举几例 - 所有这些无数的框架试图解决同样的问题.然而,它们都没有真正解决根本问题 - 这就是为什么仍然会出现越来越多的新问题.
大多数人在第一印象时看起来非常明亮和闪亮,因为它们简化了做简单的事情.
但是,一旦涉及到实际用例的实现,就会遇到问题.
通常,框架不提供任何帮助,但是通过强制根据框架自己的逻辑和环境实现事物来阻碍一个并限制选项.
简而言之,我在使用框架时会看到以下缺点:
在我看来,阿尔伯特·爱因斯坦的以下引用非常适合这里:
"我们无法通过使用我们在创建问题时使用的相同思维来解决问题."
回到我早期的PHP编码日,当编码仍然充满乐趣和高效时,我曾经为大多数事情编写自己的框架,只是复制粘贴并将它们从一个项目中采用到下一个项目.
这种方法得到了很好的支持,导致了快速开发,没有任何开销,并且实际上比大多数Java框架更强大的框架,但在单个文件中只有几百行代码加上一些简单的mod_rewrite规则.
这当然不能解决Web开发的所有问题,但它简单,快速,直接.
虽然完美地适应了当前项目的要求,但它也很容易扩展,并且由于零开销而具有非常高的性能.
那么为什么所有那些使用这个框架的麻烦,为什么不抛弃它们并回到根源呢?
当我们明天再次使用新框架启动下一个项目时,我应该对我的老板说些什么?
或者是否有可能真正有所作为的框架?
或者我忽略了一些隐藏的优势?
一方面,我读到或听到"函数调用很昂贵"并且它们会影响效率(例如,在Nicholas Zakas的Google技术谈话中).
在另一方面,然而,似乎接受了函数/方法最好剪短,只应该真正执行一个任务,如一般在接受这里.
我在这里遗漏了什么,或者这两条建议是否相互冲突?是否有一些经验法则允许人们保持禅宗般的平衡?
我认为发布开发人员实际测试的软件版本会更好; 因此,我倾向于从project/makefile中删除'debug'目标,因此只有一个版本可以构建(并经过测试,调试和发布).
出于类似的原因,我不使用'断言'(参见断言总是坏的吗 ......).
一个人认为"调试"版本的原因是它更容易调试:但是,我反驳说你可能最终想要支持和调试你发布的任何东西,所以你需要建立一个版本您可以根据需要调试...这可能意味着启用调试符号,并禁用某些优化,即使在"发布"版本中也是如此.
有人说"这是个坏主意"; 这是我几年前发展起来的政策,被以下因素烧毁:
从那时起,我看到不止一个开发商遵循这种做法(即没有单独的调试和发布版本).
你的政策是什么?
我今天和同事讨论过.
他声称每当你使用第三方库时,你应该总是为它写一个包装器.因此,您可以随时更改内容并根据具体用途调整内容.
我总是不同意这个词,关于log4j的讨论已经出现了,我声称log4j经过了很好的测试和经过时间验证的API和实现,所有可以想象的都可以后验配置,你不应该包装.即使你想要包装,也有经过验证的包装器,如commons-logging和log5j.
我们讨论的另一个例子是Hibernate.我声称它有一个非常大的API被包装.此外,它还有一个分层API,可让您根据需要调整其内部.我的朋友声称他仍然相信它应该被包装但是他没有这样做因为API的大小(这个同事在我们当前的项目中比我更老练).
我声称这个,并且应该在特定情况下进行包装:
我还坚持认为,有时你可以包装代码而不是库.例如,将与数据库相关的代码放在DAO层中,而不是抢先包装所有的hibernate.
嗯,最后这不是一个真正的问题,但您的见解,经验和意见都受到高度赞赏.
java ×3
c# ×2
optimization ×2
performance ×2
.net ×1
coding-style ×1
debugging ×1
goto ×1
javascript ×1
measurement ×1
profiling ×1
refactoring ×1
release ×1
testing ×1
visualvm ×1