Questions tagged «performance»

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

22
是std :: vector比纯数组慢得多吗?
我一直认为这std::vector是“作为数组实现” 的一般常识,等等等等。今天我去测试了它,但事实并非如此: 以下是一些测试结果: UseArray completed in 2.619 seconds UseVector completed in 9.284 seconds UseVectorPushBack completed in 14.669 seconds The whole thing completed in 26.591 seconds 大约慢了3到4倍!对于“ vector可能会慢一些纳秒”的注释并没有真正的道理。 和我使用的代码: #include <cstdlib> #include <vector> #include <iostream> #include <string> #include <boost/date_time/posix_time/ptime.hpp> #include <boost/date_time/microsec_time_clock.hpp> class TestTimer { public: TestTimer(const std::string & name) : name(name), …
212 c++  arrays  performance  stl  vector 

19
计算多列的DISTINCT
有没有更好的方法来执行这样的查询: SELECT COUNT(*) FROM (SELECT DISTINCT DocumentId, DocumentSessionId FROM DocumentOutputItems) AS internalQuery 我需要计算该表中不同项目的数量,但是不同项目超过两列。 我的查询工作正常,但我想知道是否可以仅使用一个查询(而不使用子查询)获得最终结果

13
.NET反射的成本是多少?
我不断地听到要使用多么糟糕的反射。虽然我通常会避免反思,很少发现没有它无法解决我的问题的情况,但我想知道... 对于那些在应用程序中使用反射的人,您是否衡量了性能方面的影响,真的那么糟糕吗?


8
使用私有静态方法的优点
当创建一个具有内部私有方法的类(通常是为了减少代码重复)而又不需要使用任何实例字段时,将该方法声明为静态方法是否具有性能或内存优势? 例: foreach (XmlElement element in xmlDoc.DocumentElement.SelectNodes("sample")) { string first = GetInnerXml(element, ".//first"); string second = GetInnerXml(element, ".//second"); string third = GetInnerXml(element, ".//third"); } ... private static string GetInnerXml(XmlElement element, string nodeName) { return GetInnerXml(element, nodeName, null); } private static string GetInnerXml(XmlElement element, string nodeName, string defaultValue) { XmlNode node …
209 c#  performance 

30
为什么C这么快,为什么其他语言没有那么快?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引文回答。 4个月前关闭。 改善这个问题 在收听StackOverflow播客时,戳记不断出现,“真正的程序员”用C编写,而且C快得多,因为它“靠近机器”。将前一个断言放到另一篇文章中,C有什么特别之处,它可以使其比其他语言更快?或换种说法:是什么阻止其他语言能够编译为与C一样快的二进制文件?
208 c  performance 

4
删除字符串中第一个字符的最快方法
说我们有以下字符串 string data= "/temp string"; 如果我们想删除第一个字符,/我们可以通过很多方法来完成,例如: data.Remove(0,1); data.TrimStart('/'); data.Substring(1); 但是,我真的不知道哪一个具有最好的算法,做更快.. 是否有一个最好的,或者都是一样的吗?

6
字符串列表到一个字符串
假设您有一个: List<string> los = new List<string>(); 在这个疯狂的功能世界中,我们生活在这些日子中,其中之一最适合通过串联以下内容来创建一个字符串: String.Join(String.Empty, los.ToArray()); StringBuilder builder = new StringBuilder(); los.ForEach(s => builder.Append(s)); string disp = los.Aggregate<string>((a, b) => a + b); 或普通的旧StringBuilder foreach 或者,还有更好的方法?

2
现代C ++可以免费为您提供性能吗?
有时有人声称C ++ 11/14可以提高性能,即使仅编译C ++ 98代码也可以。理由通常是根据移动语义的,因为在某些情况下,右值构造函数是自动生成的,或者现在是STL的一部分。现在,我想知道以前是否已经通过RVO或类似的编译器优化处理了这些情况。 然后我的问题是,是否可以给我一个C ++ 98代码的实际示例,该示例无需修改即可使用支持新语言功能的编译器更快地运行。我确实理解不需要标准兼容的编译器来执行复制省略,仅由于这个原因,移动语义可能会带来速度,但是如果您愿意,我希望看到一种病态较少的情况。 编辑:为了清楚起见,我不是在问新的编译器是否比旧的编译器快,而是如果有代码将-std = c ++ 14添加到我的编译器标志中,它将运行得更快(避免复制,但是如果您除了移动语义之外,还可以提出其他建议,我也很感兴趣)

7
当WebSockets可用时,为什么要使用AJAX?
我已经使用WebSockets一段时间了,我选择使用Node服务器和WebSockets为我在大学的最后一年的项目创建一个敏捷项目管理工具。我发现使用WebSockets可以使我的应用程序每秒处理的请求数量增加624%。 但是,自启动项目以来,我已经阅读了安全漏洞,并且一些浏览器默认选择禁用WebSocket。 这使我想到了一个问题: 当WebSocket似乎在降低延迟和资源开销方面做得如此出色时,为什么还要使用AJAX?AJAX有什么比WebSocket更好的功能吗?

2
优化PostgreSQL以进行快速测试
我从典型的Rails应用程序从SQLite切换到PostgreSQL。 问题在于PG的运行规范变得缓慢。 在SQLite上花了〜34秒,在PG上花了〜76秒,比原来慢2倍以上。 因此,现在我想应用一些技术来使规范的性能与SQLite保持一致,而无需修改代码(理想情况下仅通过设置连接选项,这可能是不可能的)。 从我的脑海中显而易见的几件事是: RAM磁盘(在OSX上使用RSpec进行良好的设置很不错) 未记录的表(可以将其应用于整个数据库,这样我就不必更改所有脚本了吗?) 正如您可能已经了解的那样,我不在乎可靠性和其他方面(这里DB只是一堆东西而已)。 我需要充分利用PG,并使其尽可能快。 最佳答案将理想地描述这样做的技巧,设置以及这些技巧的缺点。 更新: fsync = off + full_page_writes = off仅将时间减少到〜65秒(〜-16秒)。良好的开端,但离34的目标还很远。 更新2:我尝试使用RAM磁盘,但性能提升在误差范围内。因此似乎不值得。 更新3:* 我发现了最大的瓶颈,现在我的规格与SQLite一样快。 问题是进行了截断的数据库清理。显然,SQLite的速度太快了。 为了“修复”它,我在每次测试之前都打开一个事务,并在最后将其回滚。 约700个测试的一些数字。 截断:SQLite-34s,PG-76s。 交易:SQLite-17s,PG-18s。 SQLite的速度提高了2倍。PG的速度提高了4倍。

9
如何加快gwt编译器的速度?
我们开始在我们的项目中大量使用GWT,并且GWT编译器的性能变得越来越令人讨厌。 我们将开始改变工作方式以减轻该问题,包括更加强调托管模式浏览器,这推迟了稍后运行GWT编译器的需求,但这带来了自身的风险,特别是直到比我们想要的要晚得多的时候,才真正的浏览器发现问题。 理想情况下,我们希望使GWT编译器本身更快-一分钟才能编译一个相当小的应用程序真是令人不快。但是,如果使用的是相当幼稚的方式,我们将使用编译方式,因此我希望我们可以快速轻松地获得收益。 我们目前正在从ant Ant目标中调用com.google.gwt.dev.Compiler作为Java应用程序,最大堆内存为256m,并且有大量堆栈空间。Ant会使用fork = true和最新的Java 6 JRE启动该编译器,以尝试利用Java6的改进性能。我们将主控制器类与应用程序类路径一起传递给编译器,然后关闭。 我们还能做什么以提高速度?我们可以给它更多的信息,以便花费更少的时间来发现要做的事情吗? 我知道我们只能告诉它仅针对一个浏览器进行编译,但是我们需要进行多浏览器测试,因此这并不实际。 此时欢迎所有建议。
201 java  performance  gwt 


4
C ++标准是否要求iostream的性能较差,或者我只是在处理较差的实现?
每当我提到C ++标准库iostream的性能下降时,我都会感到一阵怀疑。但是,我的探查器结果显示,大量时间花费在iostream库代码(完整的编译器优化)上,从iostream切换到特定于操作系统的I / O API和自定义缓冲区管理确实提高了一个数量级。 C ++标准库正在做什么额外的工作,它是标准所必需的,并且在实践中是否有用?还是某些编译器提供了与手动缓冲区管理竞争的iostream实现? 基准测试 为了使事情顺利进行,我编写了一些简短的程序来练习iostream的内部缓冲: 将二进制数据放入ostringstream http://ideone.com/2PPYw 将二进制数据放入char[]缓冲区http://ideone.com/Ni5ct vector<char>使用http://ideone.com/Mj2Fi将二进制数据放入back_inserter 新功能:vector<char>简单的迭代器http://ideone.com/9iitv 新功能:将二进制数据直接放入stringbuf http://ideone.com/qc9QA 新功能:vector<char>简单的迭代器加边界检查http://ideone.com/YyrKy 请注意,ostringstream和stringbuf版本运行的迭代次数较少,因为它们要慢得多。 在ideone上,其ostringstream速度比std:copy+ back_inserter+ 慢3倍std::vector,比memcpy在原始缓冲区中慢15倍。当我将实际应用程序切换到自定义缓冲时,这感觉与前后分析一致。 这些都是内存中的缓冲区,因此不能将iostream的缓慢归咎于磁盘慢的I / O,过多的刷新,与stdio的同步,或者人们用来掩盖C ++标准库的缓慢的任何其他事情。 iostream。 很高兴看到其他系统上的基准测试以及对常见实现的注释(例如gcc的libc ++,Visual C ++,Intel C ++)以及该标准要求多少开销。 此测试的原理 许多人正确地指出,iostream更常用于格式化输出。但是,它们也是C ++标准提供的唯一用于二进制文件访问的现代API。但是,对内部缓冲进行性能测试的真正原因适用于典型的格式化I / O:如果iostream无法为磁盘控制器提供原始数据,那么当它们负责格式化时又如何保持正常运行呢? 基准时间 所有这些都是外部(k)循环的每次迭代。 在ideone上(gcc-4.3.4,未知的操作系统和硬件): ostringstream:53毫秒 stringbuf:27毫秒 vector<char>和back_inserter:17.6毫秒 vector<char> 普通迭代器:10.6毫秒 vector<char> 迭代器和边界检查:11.4毫秒 char[]:3.7毫秒 在我的笔记本电脑上(Visual C …

5
在SQL Server上使用varchar(MAX)vs TEXT
我刚刚读到,该VARCHAR(MAX)数据类型(可以存储将近2GB的char数据)是TEXTSQL Server 2005和Next SQL SERVER版本中推荐的数据类型的替代。 如果我想在列内搜索任何字符串,哪个操作更快? LIKE对VARCHAR(MAX)列使用子句? WHERE COL1 LIKE '%search string%' 使用该TEXT列并将全文索引 / 目录放在此列上,然后使用该CONTAINS子句进行搜索? WHERE CONTAINS (Col1, 'MyToken')

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.