Questions tagged «performance»

与提高应用程序性能有关的问题可能涉及从选择软件体系结构到算法选择的范围。

3
我们可以从std :: string的c_str()获得什么性能?总是恒定的时间?
我最近一直在做一些必要的优化。我一直在做的一件事是更改一些ostringstreams-> sprintfs。我正在将一堆std :: strings冲刺到ac样式数组,ala char foo[500]; sprintf(foo, "%s+%s", str1.c_str(), str2.c_str()); 事实证明,Microsoft的std :: string :: c_str()实现在恒定时间内运行(它只返回一个内部指针)。看来libstdc ++也是一样。我意识到std不能保证c_str,但是很难想象另一种方式。例如,如果他们将其复制到内存中,要么不得不为缓冲区分配内存(将其留给调用方销毁,而不是STL合同的一部分),要么必须将其复制到内部静态对象中。缓冲区(可能不是线程安全的,并且您无法保证其寿命)。因此,仅返回指向内部维护的以null终止的字符串的指针似乎是唯一可行的解​​决方案。

5
函数调用对性能有多少影响?
对于代码模块化,可读性和互操作性,尤其是在OOP中,必须将功能提取到方法或函数中。 但这意味着将进行更多的函数调用。 将我们的代码拆分为方法或函数实际上如何影响现代*语言的性能? *最受欢迎的语言:C,Java,C ++,C#,Python,JavaScript,Ruby ...

3
当调用成本很高时,通过Python中的单一职责原则(SRP)进行工作
一些基点: 由于其解释性质,Python方法调用是“昂贵的”。从理论上讲,如果您的代码足够简单,那么分解Python代码除了会提高可读性和重用性之外,还会带来负面影响(这对开发人员而言是一大收获,对用户而言却不是很多)。 单一责任原则(SRP)可使代码保持可读性,易于测试和维护。 该项目具有特殊的背景,我们需要可读的代码,测试和时间性能。 例如,像这样的调用多个方法(x4)的代码比随后的仅一个方法慢。 from operator import add class Vector: def __init__(self,list_of_3): self.coordinates = list_of_3 def move(self,movement): self.coordinates = list( map(add, self.coordinates, movement)) return self.coordinates def revert(self): self.coordinates = self.coordinates[::-1] return self.coordinates def get_coordinates(self): return self.coordinates ## Operation with one vector vec3 = Vector([1,2,3]) vec3.move([1,1,1]) vec3.revert() vec3.get_coordinates() 与此相比: from …


5
寻找最适合圈子的人
下面是一个示例图像,如果我在中间有一个白点,并且我想找到所有可能存在的红色圆圈,则该蓝色圆圈的位置可能最近(显然是我放置它的位置) 。如何找到该位置? 对我来说,性能并不是此应用程序的主要问题。

1
登录到文件还是数据库表?
我正在开发一个使用MS SQL来处理各种数据的Web应用程序:包括用户,用户帐户,用户许可证,许可证价格,发票。 我需要记录用户对系统的实时使用情况,并将其用于每月计费:例如,每当用户获得特定页面/ URL时就记录一次,并在月底根据所获取的页面数向用户计费。 是否应该将这些日志事件写入MS SQL数据库的表中? 是否应将这些日志事件写入非SQL的仅追加日志文件? 我应该为每个用户将这些日志事件写入不同的日志文件吗? 这不是一个特别庞大的网站:例如,最多10,000个用户,每个用户平均每天进行5个可记录事件=> 50,000个事件/天= 30个事件/分钟= 18,000,000个事件/年。 我问是因为这两种选择似乎都是可行的,而且我看不出是否有明显的优势。 与计费事件相关的数据很简单,例如: 用户ID(SQL中与Users表的外键关系) 日期和时间 计费页面的URL 我对这个问题的回答如下: 将日志写入数据库表的一些好处: 关系完整性:例如,记录的事件与有效的用户ID相关联(通过将用户ID定义为表之间的外键) 易于阅读的账单:例如SELECT COUNT GROUP BY,获得每个用户的日志事件数的计数 写入日志文件的一些好处: 性能更容易:SQL较少使用,例如仅用于用户登录事件,而大多数仅用于读取 易于管理:通过移动旧日志文件而不是通过从数据库中删除/存档,例如在年底时更易于归档旧数据 如果我的答案有误,请告诉我;或夸大某事的重要性;或忘记了一些重要的考虑。 和/或,如果与我的答案不同,请告诉我您的答案是什么。

2
“可能”和“不太可能”宏的使用量太多了?
通常称为likely和的unlikely宏可帮助编译器了解if通常是要输入还是要跳过的。使用它可以带来一些(而不是很小的)性能改进。 我最近开始使用它们,我不确定应该多久使用一次此类提示。我目前将其与错误检查ifs 配合使用,通常将其标记为unlikely。例如: mem = malloc(size); if (unlikely(mem == NULL)) goto exit_no_mem; 看起来还可以,但是错误检查if经常发生,因此使用了所述宏。 我的问题是,是不是太有likely和unlikely宏的每个错误的检查if? 当我们在这里时,他们经常在其他什么地方使用? 在我当前的用法中,它位于从实时子系统进行抽象的库中,因此程序可以在RTAI,QNX和其他程序之间移植。也就是说,大多数功能都很小,可以直接调用一个或两个其他功能。许多甚至是static inline功能。 因此,首先,它不是我可以描述的应用程序。“识别瓶颈”是没有意义的,因为它是一个库,而不是一个独立的应用程序。 其次,有点像“我知道这不太可能,我不妨告诉编译器”。我没有积极尝试优化if。

4
C#中哈希表和字典的实际大小限制
C#4词典或哈希表可以包含的项目数量的实际限制是多少,这些结构可以合理包含的字节总数。我将处理大量对象,并想知道这些结构何时开始遇到问题。 对于上下文,我将使用具有大量内存的64位系统。另外,我将需要使用某种形式或“键”来查找对象。鉴于性能需求,这些对象将需要驻留在内存中,并且许多对象将长期存在。 尽管我需要避免使用第三方或开放源代码库,但还是可以建议其他方法/模式。出于规范原因,我需要能够使用本机C#(或C ++ \ CLI)来构建它。


5
复杂软件应实现多少冗余/鲁棒性?
这个问题的焦点:尽管软件中存在一个或多个内部错误,某些软件执行“额外工作”以增加“最终成功/令人满意”结果的机会,当这些错误发生时,这需要更长的执行时间。如果结果成功,所有这些都会在用户不知情的情况下发生。 复杂软件的定义: 包含超过10个开发人员在其生命周期内编写的代码(由其提供),并且未在同一时间段内编写 依赖于10多个外部库,每个库都带有警告 典型的软件任务(用于生成用户想要的结果)需要10个或更多输入参数,其中大多数具有默认值,但如果用户需要控制,则可以配置。 最重要的是,相对于要执行的任务具有适当复杂性的软件,即不必造成不必要的复杂性。 编辑:什么是复杂的?请参阅复杂和复杂之间有很大的区别。(直接链接) 此问题内的冗余/鲁棒性的定义:(基于注释增加了鲁棒性) 如果在使用当前参数集时软件任务失败,请尝试其他参数。 显然,必须有内部知识,这些“不同”的参数使用不同的代码路径,可能会导致不同的(希望更好)结果。 有时,这些不同的代码路径是基于对外部库的观察而选择的。 最后,如果执行的实际任务与用户的说明略有不同,则用户将收到详细说明差异的报告。 最后,像10余个可配置参数一样,冗余和报告也是可配置的。 此类软件的示例: 数据库迁移 业务数据库 源代码控制数据库等 在Word文档和OpenOffice文档,PowerPoint和OpenOffice Draw等之间进行批量转换。 自动翻译整个网站 自动分析软件包,例如Doxygen,但需要更可靠的分析(即不仅仅是文档工具) 网络通信,其中数据包可能会丢失并且可能会重试 这个问题最初是由您如何处理故意的不良代码启发而来的?但现在仅关注软件膨胀的原因之一。这个问题没有解决软件膨胀的任何其他原因,例如添加新功能。 可能相关: 如何处理(巨大)项目中的复杂代码 人们如何管理和维护极其复杂且难以阅读的代码?

3
如何执行输入验证而没有异常或冗余
当我尝试为特定程序创建接口时,通常是在尝试避免引发依赖于未经验证的输入的异常。 因此,经常发生的事情是我想到了这样的一段代码(出于示例目的,这只是一个示例,不要介意它执行的功能,例如Java): public static String padToEvenOriginal(int evenSize, String string) { if (evenSize % 2 == 1) { throw new IllegalArgumentException("evenSize argument is not even"); } if (string.length() >= evenSize) { return string; } StringBuilder sb = new StringBuilder(evenSize); sb.append(string); for (int i = string.length(); i < evenSize; i++) { sb.append(' …

3
Foreach循环和变量初始化
这两个版本的代码之间有区别吗? foreach (var thing in things) { int i = thing.number; // code using 'i' // pay no attention to the uselessness of 'i' } int i; foreach (var thing in things) { i = thing.number; // code using 'i' } 还是编译器不在乎?当我谈到差异时,我指的是性能和内存使用情况。..或基本上没有任何区别,还是编译后两者最终成为相同的代码?
11 c#  performance  memory 

1
如何查看代码的哪些部分最常运行?
我希望能够看到成千上万行源代码中的哪些代码运行最频繁且花费时间最长。这样做的目的是为了优化。 能够看到最常运行的代码部分对于优化很重要,因为这些部分是我应该集中精力来加快速度的地方。当然,与此同时,某些代码经常运行,但是几乎不需要时间,因此能够看到哪些代码花费的时间也很重要。 我猜这两个方面最好的是一个程序,该程序可以将一段代码加起来的时间加起来,包括运行该代码的所有时间(从而弄清楚什么会使您的代码整体上最慢)。是否有一种用于此的工具?

3
低延迟Unix / Linux
大多数低延迟/高频编程作业(基于作业规范)似乎是在unix平台上实现的。在许多规范中,他们特别要求具有“低延迟linux”类型经验的人员。 假设这并不意味着可以使用实时linux操作系统,人们是否可以在这方面提供帮助?我知道您可以设置线程的CPU亲和力,但我假设他们对此的要求远远超过此。 内核调优?(尽管我听说像solarflare这样的制造商还是会生产内核旁路网卡)? DMA或进程之间可能共享的内存呢?如果人们可以给我简短的想法,我可以去Google上进行研究。 (此问题可能需要熟悉高频交易的人员)
11 c++  c  performance  linux  latency 

8
与C / C ++相比,Java难于“调整”性能吗?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 4年前关闭。 JVM的“魔力”是否会阻碍程序员对Java的微优化的影响?我最近用C ++阅读,有时数据成员的排序可以提供优化(在微秒级环境中是允许的),并且我想程序员在压缩Java性能时会束手无策吗? 我很欣赏体面的算法可以提供更高的速度增益,但是一旦有了正确的算法,由于JVM控制,Java很难进行调整吗? 如果不是这样,人们能否举例说明您可以在Java中使用哪些技巧(除了简单的编译器标志)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.