Questions tagged «performance»

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

8
XML中的Android onClick与OnClickListener
我意识到以前有人问过类似措词的问题,但这是不同的。我在开发android应用程序时还很陌生,关于android:onclick=""XML属性和setOnClickListener方法之间的区别,我有三个问题。 两者之间有什么区别?在编译时或运行时或在两者时发现两种实现之间的区别吗? 哪些用例有利于哪种实现? Android中使用片段对实现选择有何不同?

4
为什么R中的循环慢?
我知道循环很慢R,我应该尝试以向量化的方式来做事情。 但为什么?为什么循环慢而apply快?apply调用了几个子功能-看起来并不快。 更新:很抱歉,这个问题是不恰当的。我把向量化与混淆了apply。我的问题应该是 “为什么矢量化更快?”
86 performance  r  apply 

3
根据列中的公共值将大数据帧拆分为数据帧列表
我有一个包含10列的数据框,收集“用户”的操作,其中一列包含一个ID(不是唯一的,标识用户)(第10列)。数据帧的长度约为750000行。我试图提取单个数据帧(以便获取数据帧的列表或向量),并按包含“用户”标识符的列进行拆分,以隔离单个参与者的动作。 ID | Data1 | Data2 | ... | UserID 1 | aaa | bbb | ... | u_001 2 | aab | bb2 | ... | u_001 3 | aac | bb3 | ... | u_001 4 | aad | bb4 | ... | u_002 导致 list( ID | …

15
Android RecyclerView滚动性能
我已经基于“创建列表和卡片”指南创建了RecyclerView示例。我的适配器具有仅用于扩大布局的模式实现。 问题是滚动性能差。这在RecycleView中只有8个项目。 在某些测试中,我验证了在Android L中不会发生此问题。但是在KitKat版本中,性能下降是显而易见的。

8
Java切换案例:是否带有花括号?
考虑以下两个带有花括号的代码段: switch (var) { case FOO: { x = x + 1; break; } case BAR: { y = y + 1; break; } } 不带花括号: switch (var) { case FOO: x = x + 1; break; case BAR: y = y + 1; break; } 我知道,在带有大括号的代码段中,通过将每个案例放在大括号中创建了一个新的作用域。但是,如果每种情况都不需要新的作用域(即,没有重用变量名),那么将大括号与案例一起使用是否会对性能造成任何影响?

3
C和C ++中几乎相同的代码在执行时间上的巨大差异(x9)
我正尝试通过www.spoj.com解决此问题:FCTRL-阶乘 您真的不必阅读它,如果您好奇的话就去做:) 首先,我用C ++实现了它(这是我的解决方案): #include <iostream> using namespace std; int main() { unsigned int num_of_inputs; unsigned int fact_num; unsigned int num_of_trailing_zeros; std::ios_base::sync_with_stdio(false); // turn off synchronization with the C library’s stdio buffers (from https://stackoverflow.com/a/22225421/5218277) cin >> num_of_inputs; while (num_of_inputs--) { cin >> fact_num; num_of_trailing_zeros = 0; for (unsigned int fives …
85 c++  c  performance  gcc  iostream 

11
x + =比x = x + a快吗?
我正在阅读Stroustrup的“ C ++编程语言”,他说在两种向变量添加内容的方法中 x = x + a; 和 x += a; 他喜欢,+=因为它很可能会更好地实施。我认为他的意思是它的运行速度也更快。 但是真的吗?如果它取决于编译器和其他因素,如何检查?

9
64位程序是否比32位版本更大,更快?
我想我专注于x86,但是我通常对从32位到64位的转换感兴趣。 从逻辑上讲,我可以看到常量和指针在某些情况下会更大,因此程序可能会更大。为了提高效率而在单词边界上分配内存的愿望将意味着分配之间会有更多的空白。 我还听说x86的32位模式在上下文切换时由于可能重叠的4G地址空间而必须刷新其缓存。 那么,64位的真正好处是什么? 作为补充问题,128位会更好吗? 编辑: 我刚刚编写了第一个32/64位程序。它制作了16字节(32b版本)或32字节(64b版本)对象的链表/树,并在stderr上进行了大量打印-这不是一个真正有用的程序,也不是典型的程序,但这是我的第一个。 大小:81128(32b)v 83672(64b)-差异不大 速度:17s(32b)v 24s(64b)-在32位OS(OS-X 10.5.8)上运行 更新: 我注意到,正在开发一种新的混合x32 ABI(应用程序二进制接口),它是64b但使用32b指针。对于某些测试,与32b或64b相比,它导致更小的代码和更快的执行速度。 https://sites.google.com/site/x32abi/

1
Rust的Option类型的开销是多少?
在Rust中,引用永远不能为null,因此在实际需要null(例如链表)的情况下,请使用以下Option类型: struct Element { value: i32, next: Option<Box<Element>>, } 与简单指针相比,就内存分配和取消引用的步骤而言,这涉及多少开销?在编译器/运行时中,是否有一些“魔术”可以使Option成本降低,或者比Option使用非核心库使用相同的enum构造自己实现或通过将指针包装在向量中实现成本更低?

8
为什么运算符比方法调用慢得多?(仅在较旧的JIT上结构较慢)
简介: 我用C#编写高性能的代码。是的,我知道C ++可以为我提供更好的优化,但是我仍然选择使用C#。我不想辩论这种选择。相反,我想听听那些像我一样试图在.NET Framework上编写高性能代码的人。 问题: 为什么下面代码中的运算符比等效方法调用慢? 为什么在下面的代码中传递两个双精度值的方法比在内部传递两个双精度值的结构的等效方法更快?(A:较旧的JIT对结构的优化效果很差) 是否有办法让.NET JIT编译器将简单结构与结构成员一样有效?(A:获取更新的JIT) 我想知道的是: 原始的.NET JIT编译器不会内联任何涉及结构的内容。给定的奇异结构仅应在需要小值类型(如内置)进行优化但适用的情况下使用。幸运的是,在.NET 3.5SP1和.NET 2.0SP2中,他们对JIT Optimizer进行了一些改进,包括对内联的改进,尤其是对结构的改进。(我猜他们是这样做的,因为否则,他们引入的新Complex结构会表现得很糟糕……因此Complex团队可能正在对JIT Optimizer团队加紧努力。)因此,.NET 3.5 SP1之前的任何文档都可能与这个问题不太相关。 我的测试显示: 通过检查C:\ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ mscorwks.dll文件确实具有版本> = 3053,我已验证自己具有更新的JIT Optimizer,因此应该进行这些改进到JIT优化器。但是,尽管如此,我的时间安排和对拆卸的观察都显示了: JIT生成的用于传递具有两个双精度的结构的代码的效率远远低于直接传递两个双精度的代码的效率。 JIT生成的用于struct方法的代码比通过struct作为参数传递“ this”的效率要高得多。 如果传递两个双精度值而不是传递具有两个双精度值的结构,即使使用乘数(由于明显处于循环状态),JIT仍会更好地内联。 时间: 实际上,看一下反汇编,我意识到循环中的大多数时间只是从列表中访问测试数据。如果不考虑循环和数据访问的开销代码,则进行相同调用的四种方式之间的差异将大大不同。对于PlusEqual(double,double)而不是PlusEqual(Element),我得到5倍到20倍的提速。10倍到40倍用于执行PlusEqual(double,double)而不是运算符+ =。哇。伤心。 这是一组时间: Populating List<Element> took 320ms. The PlusEqual() method took 105ms. The …

2
开拓者表现
我想开始使用Blazor,尽管它仍然处于Alpha级别。 据我了解,Blazor使用WebAssembly在客户端编译C#。 我有以下问题: 这种方法的运行速度是否比用JavaScript编译的React / Vue快? 浏览器每次加载页面时是否都需要下载WebAssembly库,这是真的吗? 在Internet上,无法比较流行的JS框架的性能。因此,我想了解Microsoft新框架的理论性能。先感谢您。


4
鉴于jdk1.6及更高版本中的HashMaps导致multi = threading问题,我该如何解决我的代码
我最近在stackoverflow中提出了一个问题,然后找到了答案。最初的问题是,除了互斥锁或垃圾回收以外,还有哪些机制可以减慢我的多线程Java程序的速度? 我惊骇地发现HashMap已在JDK1.6和JDK1.7之间进行了修改。现在,它具有一个代码块,该代码块使所有创建HashMap的线程同步。 JDK1.7.0_10中的代码行是 /**A randomizing value associated with this instance that is applied to hash code of keys to make hash collisions harder to find. */ transient final int hashSeed = sun.misc.Hashing.randomHashSeed(this); 最终打电话 protected int next(int bits) { long oldseed, nextseed; AtomicLong seed = this.seed; do { oldseed = seed.get(); …

1
C代码循环性能[续]
这个问题在我的问题上继续(根据Mystical的建议): C代码循环性能 继续我的问题,当我使用打包指令而不是标量指令时,使用内在函数的代码将非常相似: for(int i=0; i<size; i+=16) { y1 = _mm_load_ps(output[i]); … y4 = _mm_load_ps(output[i+12]); for(k=0; k<ksize; k++){ for(l=0; l<ksize; l++){ w = _mm_set_ps1(weight[i+k+l]); x1 = _mm_load_ps(input[i+k+l]); y1 = _mm_add_ps(y1,_mm_mul_ps(w,x1)); … x4 = _mm_load_ps(input[i+k+l+12]); y4 = _mm_add_ps(y4,_mm_mul_ps(w,x4)); } } _mm_store_ps(&output[i],y1); … _mm_store_ps(&output[i+12],y4); } 尽管我希望它是标量版本性能的4倍,即每个周期4.1,6 = 6,4 FP ops,但该内核的测量性能约为每个周期5.6个FP操作。 考虑到权重因子的移动(感谢指出),时间表如下: 看起来时间表没有改变,尽管在操作之后还有一条额外的指令movss将标量权重值移动到XMM寄存器,然后用于shufps将该标量值复制到整个向量中。mulps考虑到从负载到浮点域的切换延迟,权重向量似乎已准备就绪,可以及时使用,因此不会引起任何额外的延迟。 …

9
x << 1或x << 10哪个更快?
我发誓,我不想优化任何事情,我只是出于好奇而问这个问题。我知道,在大多数硬件有位移(例如的组件的命令shl,shr),它是一个命令。但这有多少关系(纳秒级或CPU精巧度)重要?换句话说,以下任一处理器在任何CPU上的运行速度都更快吗? x &lt;&lt; 1; 和 x &lt;&lt; 10; 而且请不要讨厌我这个问题。:)
83 c++  c  performance  cpu  low-level 

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.