Questions tagged «performance»

对于与代码的度量或改进以及应用程序效率有关的问题。

27
.NET中的两个字节数组比较
我该如何快速完成? 当然,我可以这样做: static bool ByteArrayCompare(byte[] a1, byte[] a2) { if (a1.Length != a2.Length) return false; for (int i=0; i<a1.Length; i++) if (a1[i]!=a2[i]) return false; return true; } 但是我正在寻找BCL功能或一些经过高度优化的行之有效的方法。 java.util.Arrays.equals((sbyte[])(Array)a1, (sbyte[])(Array)a2); 效果很好,但看起来不适用于x64。 在这里记下我的超快速回答。
541 c#  .net  arrays  performance  j# 

13
为什么C ++编译需要这么长时间?
与C#和Java相比,编译C ++文件要花费很长时间。与运行正常大小的Python脚本相比,编译C ++文件花费的时间明显更长。我目前正在使用VC ++,但任何编译器都相同。为什么是这样? 我可以想到的两个原因是加载头文件并运行预处理器,但这似乎不能解释为什么要花这么长时间。

16
在LINQ查询中调用ToList()或ToArray()更好吗?
我经常遇到我想在声明它的地方评估一个查询的情况。这通常是因为我需要对其进行多次迭代,并且计算起来很昂贵。例如: string raw = "..."; var lines = (from l in raw.Split('\n') let ll = l.Trim() where !string.IsNullOrEmpty(ll) select ll).ToList(); 这很好。但是,如果我不打算修改结果,那么我不妨致电ToArray()而不是ToList()。 但是我不知道是否ToArray()通过首次调用实现,ToList()因此与仅调用相比,内存效率更低ToList()。 我疯了吗?我应该打电话给我ToArray()吗-安全又有保障,因为不会为内存分配两次?
518 .net  linq  performance 


3
Docker容器的运行时性能成本是多少?
我想全面了解Docker容器的运行时性能成本。我发现对网络的引用实际上慢了约100µs。 我还发现运行时成本“可以忽略不计”且“接近零”,但我想更准确地知道这些成本是多少。理想情况下,我想知道Docker正在以性能成本进行抽象,而抽象是在没有性能成本的情况下进行的。网络,CPU,内存等 此外,如果存在抽象成本,是否有办法解决抽象成本。例如,也许我可以直接安装磁盘,而实际上可以在Docker中安装磁盘。

23
哪个更快:堆栈分配或堆分配
这个问题听起来很基础,但这是我与另一位与我合作的开发人员进行的辩论。 我很小心地在可能的地方堆放东西,而不是堆放东西。他在跟我说话,看着我的肩膀,并评论说没有必要,因为他们是同样的表现。 我一直给人的印象是,增加堆栈的时间是恒定的,并且堆分配的性能取决于堆当前的分配(查找适当大小的孔)和取消分配(折叠孔以减少碎片)的复杂度,因为如果我没记错的话,许多标准库的实现在删除过程中都需要花费一些时间。 这让我感到震惊,因为它可能非常依赖于编译器。特别是对于这个项目,我正在使用Metrowerks编译器用于PPC体系结构。深入了解这种组合将是最有帮助的,但是总的来说,对于GCC和MSVC ++,情况是什么?堆分配的性能不如堆栈分配高吗?没有区别吗?还是差异如此之细,以至于没有意义的微优化。
503 c++  performance  memory  stack  heap 

14
将集转换为列表而不创建新列表
我正在使用此代码将转换Set为List: Map<String, List<String>> mainMap = new HashMap<>(); for (int i=0; i < something.size(); i++) { Set<String> set = getSet(...); //returns different result each time List<String> listOfNames = new ArrayList<>(set); mainMap.put(differentKeyName, listOfNames); } 我想避免在循环的每次迭代中创建一个新列表。那可能吗?
503 java  performance  list  set 


18
异常对Java性能有什么影响?
问题:Java中的异常处理是否真的很慢? 常规知识以及许多Google的研究结果都表明,不应将异常逻辑用于Java中的常规程序流程。通常有两个原因, 它确实很慢-甚至比常规代码慢一个数量级(给出的原因各不相同), 和 这很混乱,因为人们希望仅在特殊代码中处理错误。 这个问题是关于#1的。 例如,此页面将Java异常处理描述为“非常慢”,并将这种缓慢与异常消息字符串的创建相关联-“然后,此字符串用于创建抛出的异常对象。这不是很快。” Java中的有效异常处理文章说:“其原因是由于异常处理的对象创建方面,因此使固有的异常抛出速度变慢”。另一个原因是堆栈跟踪生成会减慢堆栈跟踪的速度。 我的测试(在32位Linux上使用Java 1.6.0_07,Java HotSpot 10.0)表明异常处理并不比常规代码慢。我尝试在执行一些代码的循环中运行方法。在方法的最后,我使用一个布尔值来指示是返回还是throw。这样,实际处理是相同的。我尝试以不同的顺序运行这些方法并平均测试时间,以为可能是JVM升温。在我所有的测试中,投掷速度至少与返回速度一样快,甚至不快(高达3.1%)。我完全可以接受我的测试错误的可能性,但是我并没有看到代码样本,测试比较或最近一两年中显示Java异常处理的结果的任何方式慢。 导致我走这条路的是我需要使用的将异常作为常规控制逻辑一部分的API。我想更正它们的用法,但现在可能无法。我是否必须赞扬他们的前瞻性思维? 在《即时编译中的高效Java异常处理》一文中,作者建议即使没有抛出异常,仅存在异常处理程序也足以阻止JIT编译器正确优化代码,从而减慢速度。我还没有检验过这个理论。



30
什么时候汇编比C更快?
已知的了解汇编器的原因之一是,有时可以用它来编写比用高级语言(尤其是C)编写更高性能的代码。但是,我也听到过很多次声明,尽管这并非完全错误,但实际上可以将汇编程序用于生成性能更高的代码的情况极为罕见,并且需要汇编方面的专业知识和经验。 这个问题甚至都没有涉及到汇编程序指令将是特定于机器且不可移植的,或者汇编程序的任何其他方面。当然,除了汇编语言之外,还有很多了解汇编语言的充分理由,但这只是一个具体的问题,需要征集示例和数据,而不是对汇编语言和高级语言的扩展论述。 谁能提供一些特定的例子,说明使用现代编译器进行汇编比编写良好的C代码要快得多,并且您可以提供带有分析依据的主张吗?我对这些案例的存在很有信心,但是我真的想确切地知道这些案例有多深奥,因为这似乎有些争议。
474 c  performance  assembly 


30
使字符串的首字母大写(具有最佳性能)
我有DetailsView一个TextBox 和我想要的输入数据来始终保存的第一个字母注册资本。 例: "red" --> "Red" "red house" --> " Red house" 我如何才能实现这种最大化的性能? 注意: 根据答案和答案下的注释,许多人认为这是在问是否要大写字符串中的所有单词。例如=> Red House ,不是这样,但是如果您要寻找的是,请寻找使用TextInfo的ToTitleCase方法的答案之一。(注意:这些答案对于实际提出的问题是不正确的。) 请参见TextInfo.ToTitleCase文档进行警告(不要触摸全大写字母的单词-它们被视为首字母缩写词;可以在单词中间用小写字母表示“不应”)降低,例如“ McDonald” =>“ Mcdonald”;不保证处理所有特定于文化的细微之处重新大写。) 注: 现在的问题是含糊不清,是否后的第一个字母应该被迫以小写。接受的答案假定只应更改第一个字母。如果您想强制,除了第一个字符串中的所有字母是小写,寻找一个答案包含ToLower和不包含ToTitleCase。
447 c#  performance 

6
如果我针对大小而不是速度进行优化,为什么GCC会生成15-20%的更快代码?
我在2009年首先注意到,如果我对大小(-Os)而不是速度(-O2或-O3)进行优化,那么GCC(至少在我的项目和我的机器上)倾向于生成明显更快的代码,而我一直在想为什么。 我设法创建了(相当愚蠢的)代码来显示这种令人惊讶的行为,并且足够小,可以在此处发布。 const int LOOP_BOUND = 200000000; __attribute__((noinline)) static int add(const int& x, const int& y) { return x + y; } __attribute__((noinline)) static int work(int xval, int yval) { int sum(0); for (int i=0; i<LOOP_BOUND; ++i) { int x(xval+sum); int y(yval+sum); int z = add(x, y); sum += z; …

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.