如果有人在优化代码、实现的清晰度、效率和可移植性方面证明他们的设计权衡是合理的,那么人们会如何选择?

与此问题相关的一个相关示例可能是大文件处理,其中“大文件”是“相当多 GB”的问题,可以使用随机访问方法进行简化。

读取和修改该文件的方法可以是:

  1. 无论如何使用流,并寻找所需的位置 - 这是可移植的,但可能很慢,并且不清楚 - 这几乎适用于所有操作系统。
  2. 将文件的相关部分映射为一个大块。例如,对于每个块,mmap 文件的 50MB 块进行处理 - 这适用于许多操作系统,具体取决于为该系统实现 mmap 的微妙之处。
  3. 只需 mmap 整个文件 - 这需要 64 位操作系统,并且是实现此目的最有效、最清晰的方法,但不适用于 32 位操作系统。
有帮助吗?

解决方案

不确定您在问什么,但设计过程的一部分是分析可移植性和性能要求(以及其他因素)。

如果您知道自己永远不需要移植代码,并且您需要绝对最佳性能,那么您可以相应地调整实施。没有必要为了自己的利益而携带。

另请注意,如果您同时需要性能和可移植性,那么就没有什么能阻止您为每个平台提供实现。当然,这会增加您的成本,因此,您可以优先考虑您的需求。

其他提示

如果没有约束,这个问题就无法理性地回答。

您问“最好的颜色是什么”,却没有告诉我们您是在粉刷房屋、汽车还是一幅画。

约束条件至少包括

  • 选择的语言
  • 目标平台(多CPU工业级服务器还是iPhone?)
  • 优化为 速度记忆
  • 成本(谁为此提供资金以及是否有交付限制?)

没有任何一款软件能够拥有“终极”的可移植性。

使用多种方法处理此类问题的一个例子是,但对所需的特定输入/输出和“最佳”的测量都有严格的限制 广角取景器 项目。

基本上,您需要在编码之前先考虑一下。每个项目都是独一无二的,对需求的分析可以帮助确定什么是原始的。什么能为任何项目提供最佳解决方案取决于一些事情......

首先,这个项目需要或最终是多平台吗?根据您的选择,选择正确的编程语言应该更容易。然后,您还可以在项目中使用多种语言,这是完全正常的。可移植性并不一定意味着性能降低。它意味着它需要更难的工作来实现你的目标,因为你需要高质量的代码。此外,每种编程语言都有自己的理念。了解它们是什么。有一件事是肯定的,某些问题经常反复出现。这就是为什么知道不同的设计模式有时会产生影响的原因,但有些语言有自己的习语,在选择语言时可能非常相关。需要考虑的另一件事是您可以为项目采用不同的方法。多线程,套接字,客户端/服务器系统和许多其他技术都可供您使用。选择合适的技术有助于改善项目。

了解当前可用的需求和不同的解决方案将有助于决定何时选择不同的权衡。

这实际上取决于项目的驱动因素。如果您正在进行内部企业开发,那么做最简单的事情就可以对您的目标进行努力。根据需要调整性能要求。

如果您知道在第1天需要支持不同的硬件平台,那么您显然需要选择便携式实现,或者使用多种方法。

便携性的便携性从一开始就是Java的营销宣传,并且按照惯例是C的生活事实,我相信大多数遵守它的人<!>长大<!>用Java或C会说的。

但事实上,绝对可移植性只适用于大多数具有中等复杂性的应用程序 - 任何高复杂度的应用都需要专门的调整。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top