相关疑难解决方法(0)

差异执行如何工作?

我在Stack Overflow上看到了一些这样的提及,但是盯着维基百科(相关页面已被删除),并且在一个MFC动态对话框演示中没有任何启发我.有人可以解释一下吗?学习一个根本不同的概念听起来不错.


根据答案:我认为我对此有了更好的感受.我想我第一次没有仔细查看源代码.在这一点上,我对差异执行情有不同的看法.一方面,它可以使某些任务变得相当容易.另一方面,启动并运行(即,用您选择的语言设置)并不容易(我确信如果我更好地理解它)...虽然我猜它的工具箱只需要制作一次,然后根据需要进行扩展.我认为为了真正理解它,我可能需要尝试用另一种语言实现它.

language-agnostic model-view-controller differential-execution

81
推荐指数
3
解决办法
2万
查看次数

什么时候优化过早?

正如Knuth所说,

我们应该忘记小的效率,大约97%的时间说:过早的优化是所有邪恶的根源.

这是Stack Overflow常常出现的问题,例如"哪个是最有效的循环机制","SQL优化技术?"等问题.(等等).这些优化提示问题的标准答案是分析您的代码并首先查看它是否是一个问题,如果不是,那么您的新技术就不再需要了.

我的问题是,如果某种技术不同但不是特别模糊或混淆,那真的可以被认为是过早的优化吗?

这是Randall Hyde的一篇名为"过早优化的谬误"的相关文章.

optimization premature-optimization

79
推荐指数
10
解决办法
1万
查看次数

优化C#/ .NET程序的技巧

如今优化似乎是一种迷失的艺术.所有程序员都没有从代码中挤出每一盎司的效率吗?经常在雪地里行走五英里的时候这样做?

本着回归丢失的艺术的精神,您知道的简单(或复杂)变化以优化C#/ .NET代码的一些提示是什么?因为它是如此广泛,取决于一个人想要完成什么,它有助于提供你的提示的背景.例如:

  • 当连接多个字符串时,请使用StringBuilder.请参阅底部的链接以了解相关信息.
  • 使用string.Compare两个字符串比较,而不是做这样的事情string1.ToLower() == string2.ToLower()

到目前为止,普遍的共识似乎是衡量关键.这种方式忽略了这一点:测量不会告诉你什么是错的,或者如果遇到瓶颈会怎么做.我遇到了字符串连接瓶颈一次,不知道该怎么办,所以这些提示很有用.

我甚至发布这个问题的意思是为了解决常见的瓶颈问题,以及在遇到这些问题之前如何避免它们.它甚至不一定是任何人应该盲目遵循的即插即用代码,而是更多关于获得对性能应该被考虑的理解,至少在某种程度上,并且需要注意一些常见的陷阱.

我可以看到,知道为什么提示有用以及应该应用的位置可能会有用.对于StringBuilder小费,我找到了很久以前在Jon Skeet网站上做过的帮助.

.net c# optimization

78
推荐指数
10
解决办法
4万
查看次数

Java VisualVM中的总方法时间

在Java VisualVM中,有没有办法显示总方法时间,而不是"自我时间"?(后者并不是特别有用,因为它没有告诉你任何方法实际运行的时间.)

如果没有,是否有任何独立的免费Java分析器可以计算总方法时间?

java profiling visualvm

55
推荐指数
2
解决办法
3万
查看次数

Java的秒表类

您应该使用哪个Java类进行时间性能测量?

(可以使用任何日期/时间类,但我问的原因是.Net中有一个指定的秒表类用于此目的)

java performance measurement

52
推荐指数
3
解决办法
5万
查看次数

在交换机中使用'转到'?

我已经看到了建议的编码标准Never use goto unless in a switch statement fall-through.

我不跟随.这个"例外"案件究竟是什么样的,这证明了一个goto

c# coding-style goto switch-statement

48
推荐指数
4
解决办法
4万
查看次数

不使用Java Web框架让生活更美好?

我已经厌倦了每隔一天必须学习另一个Java Web框架.
JSP,Struts,Wicket,JSF,JBoss Seam,Spring MVC仅举几例 - 所有这些无数的框架试图解决同样的问题.然而,它们都没有真正解决根本问题 - 这就是为什么仍然会出现越来越多的新问题.

大多数人在第一印象时看起来非常明亮和闪亮,因为它们简化了做简单的事情.
但是,一旦涉及到实际用例的实现,就会遇到问题.
通常,框架不提供任何帮助,但是通过强制根据框架自己的逻辑和环境实现事物来阻碍一个并限制选项.

简而言之,我在使用框架时会看到以下缺点:

  1. 大多数情况都是陡峭的学习曲线,在开始之前,您首先需要了解一些相当理论的概念,并了解一堆配置文件的含义和位置.
  2. 文档通常或多或少可怕,要么缺少公共可访问的在线参考,无助过时,将不同的不兼容版本或所有这些混淆在一起,并且通常不提供任何有用的示例.
  3. 该框架由数以万计的类组成,这使得仅通过浏览源来实际理解预期用途是不可能的.
  4. 因此,您需要购买一些"21天内用于假人的XYZ"书籍,这些书籍的用户界面很差,因为他们缺少全文搜索并且携带很多.
  5. 要真正使用这个框架中的一个,你需要通过记住适当的类和方法名称来记住框架需要它的方式,通过记住适当的类和方法名称,直到你的头脑充满了你不能用于其他任何东西的愚蠢和无用的信息. .
  6. 有一个很大的开销,减慢你的应用程序性能,并在试图了解真正发生的事情时让你的大脑感到麻木.
  7. 在现实世界中,由于生产力的压力,通常没有时间熟悉新事物.通过这种学习方法的结果,人们总是只寻找完成下一个任务的最快方法,而不是真正理解新工具及其可能性.
  8. 遵循标准的论点允许新项目的人快速入门在我的视图中无效,因为每个项目甚至在同一公司内使用不同的框架(至少在我的情况下).

在我看来,阿尔伯特·爱因斯坦的以下引用非常适合这里:

"我们无法通过使用我们在创建问题时使用的相同思维来解决问题."

回到我早期的PHP编码日,当编码仍然充满乐趣和高效时,我曾经为大多数事情编写自己的框架,只是复制粘贴并将它们从一个项目中采用到下一个项目.
这种方法得到了很好的支持,导致了快速开发,没有任何开销,并且实际上比大多数Java框架更强大的框架,但在单个文件中只有几百行代码加上一些简单的mod_rewrite规则.
这当然不能解决Web开发的所有问题,但它简单,快速,直接.
虽然完美地适应了当前项目的要求,但它也很容易扩展,并且由于零开销而具有非常高的性能.

那么为什么所有那些使用这个框架的麻烦,为什么不抛弃它们并回到根源呢?
当我们明天再次使用新框架启动下一个项目时,我应该对我的老板说些什么?
或者是否有可能真正有所作为的框架?
或者我忽略了一些隐藏的优势?

java web-applications web-frameworks

46
推荐指数
6
解决办法
4756
查看次数

"函数调用很昂贵"与"保持函数小"

一方面,我读到或听到"函数调用很昂贵"并且它们会影响效率(例如,在Nicholas Zakas的Google技术谈话中).

在另一方面,然而,似乎接受了函数/方法最好剪短,只应该真正执行一个任务,如一般在接受这里.

我在这里遗漏了什么,或者这两条建议是否相互冲突?是否有一些经验法则允许人们保持禅宗般的平衡?

javascript performance

46
推荐指数
2
解决办法
9237
查看次数

单独的'调试'和'发布'构建?

我认为发布开发人员实际测试的软件版本会更好; 因此,我倾向于从project/makefile中删除'debug'目标,因此只有一个版本可以构建(并经过测试,调试和发布).

出于类似的原因,我不使用'断言'(参见断言总是坏的吗 ......).

一个人认为"调试"版本的原因是它更容易调试:但是,我反驳说你可能最终想要支持和调试你发布的任何东西,所以你需要建立一个版本您可以根据需要调试...这可能意味着启用调试符号,并禁用某些优化,即使在"发布"版本中也是如此.

有人说"这是个坏主意"; 这是我几年前发展起来的政策,被以下因素烧毁:

  • 一些开发人员测试他们的调试但不测试发布版本
  • 一些开发人员编写的bug只出现在发布版本中
  • 该公司在测试不充分后发布了发布版本(它是否完全足够?)
  • 被要求调试发布版本

从那时起,我看到不止一个开发商遵循这种做法(即没有单独的调试和发布版本).

你的政策是什么?

testing debugging release release-management

44
推荐指数
5
解决办法
1万
查看次数

您是否应该将您采用的第三方库包装到项目中?

我今天和同事讨论过.

他声称每当你使用第三方库时,你应该总是为它写一个包装器.因此,您可以随时更改内容并根据具体用途调整内容.

总是不同意这个词,关于log4j的讨论已经出现了,我声称log4j经过了很好的测试和经过时间验证的API和实现,所有可以想象的都可以后验配置,你不应该包装.即使你想要包装,也有经过验证的包装器,如commons-logging和log5j.

我们讨论的另一个例子是Hibernate.我声称它有一个非常大的API被包装.此外,它还有一个分层API,可让您根据需要调整其内部.我的朋友声称他仍然相信它应该被包装但是他没有这样做因为API的大小(这个同事在我们当前的项目中比我更老练).

我声称这个,并且应该在特定情况下进行包装:

  • 您不确定图书馆如何满足您的需求
  • 您将只使用一小部分库(在这种情况下,您可能只暴露其API的一部分).
  • 您不确定库的API或实现的质量.

我还坚持认为,有时你可以包装代码而不是库.例如,将与数据库相关的代码放在DAO层中,而不是抢先包装所有的hibernate.

嗯,最后这不是一个真正的问题,但您的见解,经验和意见都受到高度赞赏.

refactoring

44
推荐指数
6
解决办法
6463
查看次数