Questions tagged «optimization»

优化是改进方法或设计的行为。在编程中,优化通常采取提高算法速度或减少所需资源的形式。优化的另一个含义是机器学习中使用的数值优化算法。

11
清除.NET StringBuilder内容的最佳方法
我想问一下您认为清除内容以便重用StringBuilder的最佳方法(持续时间更少/消耗的资源更少)是什么。想象以下情况: StringBuilder sb = new StringBuilder(); foreach(var whatever in whateverlist) { sb.Append("{0}", whatever); } //Perform some stuff with sb //Clear stringbuilder here //Populate stringbuilder again to perform more actions foreach(var whatever2 in whateverlist2) { sb.Append("{0}", whatever2); } 在清除StringBuilder时,我可以想到两种可能性: sb = new StringBuilder(); 要么 sb.Length = 0; 清除它的最佳方法是什么?为什么? 谢谢。 编辑:用当前的.NET 3.5版本。

6
领域与财产。性能优化
请注意此问题仅与性能有关。让我们跳过设计准则,理念,兼容性,可移植性以及与纯性能无关的任何内容。谢谢。 现在到问题。我一直以为,因为C#的getter / setters实际上是伪装的方法,所以读取公共字段必须比调用getter更快。 因此,请确保我进行了测试(下面的代码)。但是,如果从Visual Studio内部运行此测试,则只能产生预期的结果(即,字段比getter的速度快34%)。 从命令行运行后,它将显示几乎相同的时间... 唯一的解释可能是CLR进行了其他优化(如果我在这里错了,请纠正我)。 我不认为在实际应用中以更复杂的方式使用这些属性时,它们将以相同的方式进行优化。 请帮助我证明或否定现实生活中的属性比字段慢的想法。 问题是-我应该如何修改测试类以使CLR更改行为,以便公共领域优于吸气剂。或告诉我,任何没有内部逻辑的属性都将与字段表现相同(至少在getter上) 编辑:我只在谈论发布x64版本。 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Diagnostics; using System.Runtime.InteropServices; namespace PropertyVsField { class Program { static int LEN = 20000000; static void Main(string[] args) { List<A> a = new List<A>(LEN); List<B> b = new List<B>(LEN); …

7
foldl是尾递归的,那么foldr如何比foldl运行得更快?
我想测试foldl vs foldr。从我所看到的情况来看,由于尾部递归优化,您应该在可能的情况下使用foldl over foldr。 这很有道理。但是,运行此测试后,我感到困惑: 文件夹(使用时间命令时需要0.057s): a::a -> [a] -> [a] a x = ([x] ++ ) main = putStrLn(show ( sum (foldr a [] [0.. 100000]))) foldl(使用time命令时需要0.089s): b::[b] -> b -> [b] b xs = ( ++ xs). (\y->[y]) main = putStrLn(show ( sum (foldl b [] [0.. …


9
我的Android应用程序正在消耗电池吗?
我正在为Android开发游戏。它使用表面视图,并使用提供的各种标准2D绘图API。当我第一次发布游戏时,我正在做各种各样的愚蠢的事情,例如在每个帧上重新绘制9个补丁,并同样使用文本。从那以后,我已经通过绘制到位图对象并在每一帧绘制它们来优化了大部分内容,仅在需要时才重新绘制到位图对象上。 之前和之后,我都收到过有关电池电量耗尽的投诉,我想(科学地)知道我是否进行了任何改进。不幸的是,我没有任何先验数据,因此将性能与某些其他游戏进行比较将非常有用。 我一直在运行Traceview,并将其结果主要用于识别耗时的方法。 那么-确定应用程序电池性能的最佳方法是什么,什么是好的基准? 我知道我可以通过设置查看不同应用程序的%s,但这又不科学,因为我从中获得的数据还取决于所有其他应用程序中发生的事情。我已经阅读了Google的大部分文档,尽管很明显,您应该节省电池电量(偶尔会提示如何使用),但是几乎没有迹象表明我可以衡量我的应用程序的性能如何表演。我要说的最后一件事是更多关于Android电子市场电池耗电的投诉! 提前致谢。 编辑 感谢您提供的所有有益的建议/建议。我真正想知道的是如何使用来自Traceview的数据(即:游戏每一帧花费的CPU时间(以毫秒为单位))来确定电池使用情况(如果可能的话)。回顾我原来的问题,我可以看出我有点含糊。再次感谢。

6
MySql查看性能
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 5年前关闭。 改善这个问题 如果您打算使用视图,那么如何确保良好的性能? 还是最好不要先使用视图,而只是将等效视图合并到您的select语句中?

6
如何在一个表中查找在另一表中没有对应行的行
我在两个表之间有1:1的关系。我想查找表A中所有没有在表B中对应的行。我使用以下查询: SELECT id FROM tableA WHERE id NOT IN (SELECT id FROM tableB) ORDER BY id desc id是两个表中的主键。除了主键索引外,我还在tableA(id desc)上有一个索引。 使用H2(Java嵌入式数据库),将对tableB进行全表扫描。我想避免全表扫描。 如何重写此查询以快速运行?我应该怎样索引?
73 sql  optimization  h2 


5
是否允许编译器优化堆内存的分配?
考虑使用以下简单代码new(我知道没有delete[],但是与这个问题无关): int main() { int* mem = new int[100]; return 0; } 是否允许编译器优化new调用? 在我的研究中,g ++(5.2.0)和Visual Studio 2015不能优化new调用,而clang(3.0+)可以优化调用。所有测试均已启用了全部优化功能(对于g ++和clang为-O3,对于Visual Studio为Release模式)。 是不是 new幕后进行系统调用,从而使编译器无法(而且是非法的)优化它吗? 编辑:我现在已经从程序中排除了未定义的行为: #include <new> int main() { int* mem = new (std::nothrow) int[100]; return 0; } clang 3.0不再优化了,但是更高版本。 编辑2: #include <new> int main() { int* mem = new (std::nothrow) int[1000]; …

9
如何防止GCC优化繁忙的等待循环?
我想为Atmel AVR微控制器编写C代码固件。我将使用GCC进行编译。另外,我想启用编译器优化(-Os或-O2),因为我没有理由不启用它们,并且它们可能比手动编写程序集更快地产生更好的组装方式。 但是我想要一小段未优化的代码。我想将函数的执行延迟一段时间,因此我想编写一个空循环,以浪费时间。无需精确,只需等待一段时间。 /* How to NOT optimize this, while optimizing other code? */ unsigned char i, j; j = 0; while(--j) { i = 0; while(--i); } 由于AVR内存访问是慢了很多,我想i和j被关在CPU寄存器。 更新:我刚刚从AVR Libc中找到util / delay.h和util / delay_basic.h。尽管大多数时候使用这些功能可能是一个更好的主意,但这个问题仍然有效且有趣。 相关问题: 如何防止gcc在C语言中优化某些语句? 有没有办法告诉GCC不要优化特定代码? 如何不优化-愚蠢功能的机制
72 c  optimization  gcc  avr-gcc 

22
编译器优化会引入错误吗?
今天,我与我的一个朋友进行了讨论,我们就“编译器优化”进行了两个小时的辩论。 我捍卫了这样的观点,有时,编译器优化可能会引入错误或至少会带来不良行为。 我的朋友完全不同意,说“编译器是由聪明的人建造的,可以做聪明的事情”,因此永远不会出错。 他一点也不说服我,但是我不得不承认我缺乏现实生活中的例子来加强我的观点。 谁在这里?如果是的话,您是否有现实生活中的示例,其中编译器优化在结果软件中产生了错误?如果我误会了,我应该停止编程并学习钓鱼吗?

12
查看ArrayList是否包含Java中对象的最有效方法
我在Java中有一个ArrayList对象。这些对象有四个字段,我将其中两个用于考虑该对象与另一个字段相等。给定这两个字段,我正在寻找最有效的方法,以查看数组是否包含该对象。 棘手的是,这些类是基于XSD对象生成的,因此我无法修改这些类本身以覆盖.equals。 有没有比遍历并手动比较每个对象的两个字段然后在找到时中断的更好的方法了?寻找更好的方法,这看起来太混乱了。 编辑: ArrayList来自未编组到对象中的SOAP响应。

7
C ++优化器将对Clock()的调用重新排序是否合法?
C ++编程语言第4版,第225页显示:编译器可以对代码重新排序以提高性能,只要结果与简单执行顺序相同即可。某些编译器,例如处于发布模式的Visual C ++,将重新排序以下代码: #include <time.h> ... auto t0 = clock(); auto r = veryLongComputation(); auto t1 = clock(); std::cout << r << " time: " << t1-t0 << endl; 变成这种形式: auto t0 = clock(); auto t1 = clock(); auto r = veryLongComputation(); std::cout << r << " time: " …

13
为什么在C ++中更喜欢无符号签名?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 7年前关闭。 改善这个问题 我想更好地了解为什么选择int了unsigned? 就个人而言,除非有正当理由,否则我从不喜欢带符号的值。例如,数组中的项数,字符串的长度或存储块的大小等,因此这些东西通常不可能为负数。这样的值没有可能的含义。为什么int在所有此类情况下都令人误解,还是选择它呢? 我问这个,因为这两个Bjarne的Stroustrup的和钱德勒卡鲁斯给了建议,喜欢int在unsigned 这里(大约12:30' )。 我可以看到使用intovershort或long-的参数int是目标机器体系结构的“最自然的”数据宽度。 但是无人签名总是让我很烦。在典型的现代CPU架构上,带符号的值是否真的更快?是什么使它们更好?
71 c++  optimization 

2
为什么使用三元运算符返回字符串与返回等效的if / else块会产生截然不同的代码?
我在使用Compiler Explorer时,偶然发现使用三元运算符时会发生以下有趣的行为: std::string get_string(bool b) { return b ? "Hello" : "Stack-overflow"; } 编译器为此生成的代码(带有-O3的Clang干线)是这样的: get_string[abi:cxx11](bool): # @get_string[abi:cxx11](bool) push r15 push r14 push rbx mov rbx, rdi mov ecx, offset .L.str mov eax, offset .L.str.1 test esi, esi cmovne rax, rcx add rdi, 16 #< Why is the compiler storing the …

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.