Questions tagged «performance»

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

7
反思有多慢
我最近创建了一个接口层,以区分DataAccessProvider和我们的业务逻辑层。通过这种方法,我们可以随时通过更改Web / App.Config中的值来更改对DataAccessProvider的选择。(如果需要,可以提供更多详细信息)。 无论如何,为了做到这一点,我们使用反射来完成我们可以使用的DataProvider类。 /// <summary> /// The constructor will create a new provider with the use of reflection. /// If the assembly could not be loaded an AssemblyNotFoundException will be thrown. /// </summary> public DataAccessProviderFactory() { string providerName = ConfigurationManager.AppSettings["DataProvider"]; string providerFactoryName = ConfigurationManager.AppSettings["DataProviderFactory"]; try { activeProvider = Assembly.Load(providerName); …

6
我如何找出重击SQL Server的原因?
在今天的大部分时间里,我的SQL Server CPU大约占90%。 由于它一直在使用,我无法重新启动它。 是否有可能找出SQL中导致这种CPU过载的原因? 我已经运行了SQL事件探查器,但是发生了很多事情,很难确定是否有任何特别的原因引起了它。 我已经运行了sp_who2,但是不确定所有含义到底是什么,以及是否有可能在此处确定可能的问题。 为了阻止任何“可能只是被大量使用”的响应,今天才从完全正常的活动水平开始。 我一直在寻找在SQL中导致CPU崩溃的原因。

9
在C / C ++中获得正模的最快方法
通常,在我的内部循环中,我需要以“环绕”方式为数组建立索引,以便(例如)如果数组大小为100,并且我的代码要求输入元素-2,则应将其赋值为元素98。高级语言(例如Python)可以使用轻松实现my_array[index % array_size],但是由于某些原因,C的整数算术(通常)会舍入为零而不是始终舍入,因此,当给定第一个负数时,其模运算符将返回负数。 我常常知道这index不会少于-array_size,在这种情况下我会做到my_array[(index + array_size) % array_size]。但是,有时无法保证,对于这些情况,我想知道实现始终为正的模函数的最快方法。有几种“智能”方式可以做到而无需分支,例如 inline int positive_modulo(int i, int n) { return (n + (i % n)) % n; } 要么 inline int positive_modulo(int i, int n) { return (i % n) + (n * (i < 0)); } 当然,我可以对它们进行概要分析以找出哪个是系统上最快的,但是我不禁担心自己可能错过了更好的系统,或者我的计算机上的速度在另一台计算机上可能较慢。 那么,有没有一种标准的方法来执行此操作,或者我错过了一些巧妙的技巧,而这可能是最快的方法? 另外,我知道这可能是一厢情愿的想法,但是如果有一种方法可以自动矢量化,那就太神奇了。
70 c++  c  performance 

9
在PHP(> = 5.0)中,通过引用传递速度更快吗?
在PHP中,可以通过在函数声明中的参数前面加上“&”号来通过引用传递函数参数,如下所示: function foo(&$bar) { // ... } 现在,我知道这并不是为了提高性能而设计的,而是允许函数更改通常不在其范围内的变量。 取而代之的是,PHP似乎使用写时复制来避免在对象被更改之前复制对象(也许还有数组)。因此,对于不更改其参数的函数,其效果应与您通过引用传递它们的效果相同。 但是,我想知道写时复制逻辑是否可能在传递引用时短路,并且这是否会对性能产生影响。 ETA:可以肯定的是,我认为它并不快,而且我很清楚这不是引用的目的。所以我想我自己的猜测很好,我是在寻找一个真正知道内幕下肯定正在发生什么的人的答案。在PHP开发的五年中,我总是发现很难通过阅读源代码来获取有关PHP内部的高质量信息。

7
Python中最有效的图形数据结构是什么?[关闭]
关闭。此问题不符合堆栈溢出准则。它当前不接受答案。 想改善这个问题吗?更新问题,使其成为Stack Overflow的主题。 4年前关闭。 改善这个问题 我需要能够在python中处理大型(10 ^ 7个节点)图。对应于每个节点/边缘的数据是最少的,例如,少量的字符串。就内存和速度而言,最有效的方法是什么? dict的dict更灵活,更易于实现,但我直观地期望列表列表会更快。list选项还要求我将数据与结构分开,而dict则允许某种形式: graph[I][J]["Property"]="value" 你有什么建议? 是的,我应该对效率的含义更加清楚。在这种特殊情况下,我的意思是随机访问检索。 将数据加载到内存中并不是一个大问题。一劳永逸。耗时的部分是访问节点,因此我可以提取信息并衡量我感兴趣的指标。 我没有考虑过将每个节点都设为一个类(所有节点的属性都相同),但是这似乎会增加额外的开销?我希望有人能对他们可以分享的类似案例有一些直接的经验。毕竟,图是CS中最常见的抽象之一。

14
如何减少Xcode的构建时间/加快编译时间?
通常可以使用什么策略来减少任何Xcode项目的构建时间?我对Xcode特定策略最感兴趣。 我正在使用Xcode进行iPhone开发,我的项目正在逐渐变得越来越大。我发现编译/链接阶段开始花费比我想要的更多的时间。 目前,我是: 使用静态库来做到这一点,这样我每次清理和构建主项目时就不需要编译大多数代码 已经从我的应用程序中删除了大多数资源,并在可能的情况下在iPhone模拟器中使用硬编码的文件系统路径进行了测试,因此在我对其进行更改时,不必经常打包我的资源。 我注意到,“检查依赖项”阶段似乎花费的时间比我想要的要长。任何技巧,以减少这一点,将不胜感激!

5
为什么追加到列表不好?
我最近开始学习scala,并且遇到了::(cons)函数,该函数位于列表的前面。 在《 Scala中的编程》一书中,它指出没有附加功能,因为附加到列表的性能为o(n),而前置的性能为o(1) 关于那句话,我有些不对劲。 性能不取决于实现吗?难道不能简单地实现带有向前和向后链接的列表并将第一个和最后一个元素存储在容器中? 我想的第二个问题是,当我有一个列表1,2,3并想在其末尾加4时该怎么办?

8
Thrift,协议缓冲区,JSON,EJB等的性能比较?
我们正在研究传输/协议解决方案,并且即将进行各种性能测试,因此我认为我应该与社区联系,以了解他们是否已经这样做: 有没有人比较Linux上的EJB3,Thrift和协议缓冲区,对简单的回显服务以及针对各种消息大小的序列化/反序列化进行了服务器性能测试? 主要的语言是Java,C / C ++,Python和PHP。 更新:我仍然对此很感兴趣,如果有人做了进一步的基准测试,请告诉我。另外,非常有趣的基准测试显示压缩的JSON与Thrift / Protocol Buffer的性能相似/更好,因此我也将JSON引入了这个问题。

2
为什么具有可为空值的结构的HashSets会异常慢?
我调查了性能下降,并将其跟踪到缓慢的HashSet。 我有带有可为空值的结构,用作主键。例如: public struct NullableLongWrapper { private readonly long? _value; public NullableLongWrapper(long? value) { _value = value; } } 我注意到创建A的HashSet<NullableLongWrapper>过程非常缓慢。 这是使用BenchmarkDotNet的示例:(Install-Package BenchmarkDotNet) using System.Collections.Generic; using System.Linq; using BenchmarkDotNet.Attributes; using BenchmarkDotNet.Configs; using BenchmarkDotNet.Jobs; using BenchmarkDotNet.Running; public class Program { static void Main() { BenchmarkRunner.Run<HashSets>(); } } public class Config : ManualConfig …
69 c#  .net  performance  struct 

8
数据库/ SQL:如何存储经度/纬度数据?
性能问题... 我有一个具有地理位置数据(经度和纬度)的房屋数据库。 我想做的就是找到使用InnoDB数据库引擎将位置数据存储在MySQL(v5.0.24a)中的最佳方法,这样我就可以执行很多查询,以返回介于两者之间的所有主记录。 x1和x2latitude以及y1和y2 longitude。 现在,我的数据库架构是 --------------------- Homes --------------------- geolat - Float (10,6) geolng - Float (10,6) --------------------- 我的查询是: SELECT ... WHERE geolat BETWEEN x1 AND x2 AND geolng BETWEEN y1 AND y2 我上面描述的是使用Float(10,6)在MySQL中存储经度和纬度数据并分离出经度/纬度的最佳方法吗?如果没有,那是什么?存在浮点数,小数甚至空间作为数据类型。 从性能的角度来看,这是执行SQL的最佳方法吗?如果没有,那是什么? 使用其他MySQL数据库引擎有意义吗? 更新:仍然没有答案 我在下面有3个不同的答案。一个人说要用Float。一个人说要用INT。一个人说要用Spatial。 因此,我使用MySQL的“ EXPLAIN”语句来衡量SQL的执行速度。如果对经度和纬度数据类型使用INT或FLOAT,则似乎在SQL执行(结果集获取)方面绝对没有区别。 看起来使用“ BETWEEN”语句比使用“ >”或“ <” SQL语句快得多。使用“ BETWEEN”比使用“ >”和“ <”语句快将近3倍。 话虽如此,我仍然不确定使用Spatial会对性能产生什么影响,因为我不清楚我的MySQL版本(v5.0.24)是否支持它,以及如何启用它(如果支持) 。 …

6
JDBC批处理插入性能
我需要将几亿条记录插入mysql db。我要一次插入一百万个。请在下面查看我的代码。它似乎很慢。有什么方法可以优化它吗? try { // Disable auto-commit connection.setAutoCommit(false); // Create a prepared statement String sql = "INSERT INTO mytable (xxx), VALUES(?)"; PreparedStatement pstmt = connection.prepareStatement(sql); Object[] vals=set.toArray(); for (int i=0; i<vals.length; i++) { pstmt.setString(1, vals[i].toString()); pstmt.addBatch(); } // Execute the batch int [] updateCounts = pstmt.executeBatch(); System.out.append("inserted "+updateCounts.length);


4
为什么构造std :: optional <int>比std :: pair <int,bool>昂贵?
考虑以下两种可以表示“可选int”的方法: using std_optional_int = std::optional&lt;int&gt;; using my_optional_int = std::pair&lt;int, bool&gt;; 鉴于这两个功能... auto get_std_optional_int() -&gt; std_optional_int { return {42}; } auto get_my_optional() -&gt; my_optional_int { return {42, true}; } ... g ++干线和clang ++干线 (带有-std=c++17 -Ofast -fno-exceptions -fno-rtti)都会产生以下汇编: get_std_optional_int(): mov rax, rdi mov DWORD PTR [rdi], 42 mov BYTE PTR [rdi+4], 1 …


2
为什么std :: fill(0)比std :: fill(1)慢?
我在一个系统std::fill上观察到,与恒定值或动态值相比,将恒定值std::vector&lt;int&gt;设置为大时显着且始终较慢:01 5.8 GiB /秒和7.5 GiB /秒 但是,对于较小的数据,结果会有所不同,但fill(0)速度更快: 如果有多个线程,则在4 GiB数据大小下,fill(1)斜率更高,但峰值要低得多fill(0)(51 GiB / s与90 GiB / s): 这就提出了第二个问题,即为什么峰值带宽 fill(1)这么低。 为此的测试系统是双插槽Intel Xeon CPU E5-2680 v3,设置为2.5 GHz(通过/sys/cpufreq),带有8x16 GiB DDR4-2133。我使用GCC 6.1.0(-O3)和Intel编译器17.0.1(-fast)进行了测试,两者均得到相同的结果。GOMP_CPU_AFFINITY=0,12,1,13,2,14,3,15,4,16,5,17,6,18,7,19,8,20,9,21,10,22,11,23被设定。Strem / add / 24线程在系统上的速度为85 GiB / s。 我能够在不同的Haswell双套接字服务器系统上重现这种效果,但在任何其他体系结构上均无法重现。例如,在Sandy Bridge EP上,内存性能是相同的,而在高速缓存fill(0)中则要快得多。 这是要重现的代码: #include &lt;algorithm&gt; #include &lt;cstdlib&gt; #include &lt;iostream&gt; #include &lt;omp.h&gt; #include &lt;vector&gt; using value = …

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.