Tag: 性能

衡量代码执行时间的最好方法是什么?

我试图确定删除string的方法是最快的 。 我只是得到开始和结束时间,并显示差异。 但结果是如此不同 ,例如,如下所示,同样的方法可以从60毫秒到231毫秒。 什么是更好的方法来获得更准确的结果? 替代文字http://www.deviantsart.com/upload/1q4t3rl.png using System; using System.Collections; using System.Collections.Generic; namespace TestRemoveFast { class Program { static void Main(string[] args) { for (int j = 0; j < 10; j++) { string newone = ""; List<string> tests = new List<string>(); for (int i = 0; i < 100000; i++) { tests.Add("{http://company.com/Services/Types}ModifiedAt"); } […]

为什么保存会话保存在数据库中呢?

我已经看到,codeigniter有能力保存会话值在数据库中。 它说在数据库中保存会话是一个很好的安全实践。 但是我认为将会话信息保存在数据库中有助于提高性能。 他们只保存会话的一些元素,例如: CREATE TABLE IF NOT EXISTS 'ci_sessions' ( session_id varchar(40) DEFAULT '0' NOT NULL, ip_address varchar(16) DEFAULT '0' NOT NULL, user_agent varchar(50) NOT NULL, last_activity int(10) unsigned DEFAULT 0 NOT NULL, user_data text NOT NULL, PRIMARY KEY (session_id) ); 但是,如果一个网站使用更多的会话variables,如用户名,上次login时间等,我可以将它们保存在数据库中,并在程序中使用它们。 我必须将这些列添加到同一个表吗? 我认为将会话信息保存在数据库中仅有助于减lessWeb服务器的内存使用量(RAM)。 任何人都可以解释一下它在提高安全性方面的意义吗?

Java反思:为什么这么慢?

我总是避免Javareflection,因为它的缓慢声誉。 我在当前项目的devise中达到了一个地步,能够使用它会使我的代码更具可读性和优雅性,所以我决定放弃它。 我简直惊讶的差异,我注意到有时几乎100倍的运行时间。 即使在这个简单的例子中,它只是实例化一个空的类,这是令人难以置信的。 class B { } public class Test { public static long timeDiff(long old) { return System.currentTimeMillis() – old; } public static void main(String args[]) throws Exception { long numTrials = (long) Math.pow(10, 7); long millis; millis = System.currentTimeMillis(); for (int i=0; i<numTrials; i++) { new B(); } System.out.println("Normal instaniation took: " […]

与C ++中的普通指针相比,智能指针的开销是多less?

与C ++ 11中的普通指针相比,智能指针的开销是多less? 换句话说,如果我使用智能指针,我的代码会变慢,如果是这样,慢多less? 具体来说,我问的是C ++ 11 std::shared_ptr和std::unique_ptr 。 显然,按下堆栈的东西会更大(至less我是这么认为的),因为一个智能指针还需要存储其内部状态(引用计数等),问题实际上是,这是多less影响我的performance,如果有的话? 例如,我从一个函数而不是一个普通的指针返回一个智能指针: std::shared_ptr<const Value> getValue(); // versus const Value *getValue(); 或者,例如,当我的一个函数接受一个智能指针作为参数,而不是一个正常的指针: void setValue(std::shared_ptr<const Value> val); // versus void setValue(const Value *val);

C#generics是否具有性能优势?

我有许多代表各种实体的数据类。 哪一个更好:使用generics和接口编写generics类(比如打印或输出XML),或者编写一个单独的类来处理每个数据类? 是否有performance收益或其他利益(除了节省我分开的课程时间)?

如何计算1的数字将在二进制数字?

可能重复: 计算32位整数中设置位数的最佳algorithm是什么? 我如何计算一个数字将在二进制数字? 所以我们假设我的数字是45 ,等于101101 ,二进制数字是4 1 。 什么是写一个algorithm来做到这一点的最有效的方法?

为什么我的日志logging库会使性能testing运行得更快?

我花了一年的时间开发一个C ++的日志logging库,并且考虑到性能。 为了评估性能,我开发了一套基准testing程序 ,将我的代码与其他库进行比较,其中包括根本不执行任何日志logging的基本情况。 在我的上一个基准testing中,我测量了一个CPU密集型任务的总运行时间。 然后我可以比较一下时间来确定我的图书馆有多less开销。 这个条形图显示了与我的非测井基础案例相比的差异。 正如你所看到的,我的库(“鲁莽”)增加了负面开销 (除非所有4个CPU核心都忙)。 当启用日志function时,程序运行速度比停用时快大约半秒。 我知道我应该尝试把这个问题分解成一个简单的案例,而不是问一个4000线的项目。 但是有那么多的地方要去掉什么东西,没有一个假设,当我试图隔离它的时候,我会让问题消失。 我可能再花一年时间来做这件事。 我希望堆栈溢出的集体专业知识会使这个问题变得更加简单,或者对于那些比我更有经验的人来说,这个原因是显而易见的。 关于我的图书馆和基准的一些事实: 该库由一个将日志参数推送到无锁队列(Boost.Lockless)的前端API和一个执行string格式化并将日志条目写入磁盘的后端线程组成。 时间是基于简单地在程序的开始和结束处调用std::chrono::steady_clock::now() ,并打印差异。 该基准testing是在一个4核英特尔CPU(i7-3770K)上运行的。 基准程序计算一个1024×1024 Mandelbrot分形并logging每个像素的统计信息,即它写入大约一百万条日志条目。 单个工作线程的总运行时间约为35秒。 所以速度增加大概是1.5%。 基准testing产生一个输出文件(这不是定时代码的一部分),它包含了生成的Mandelbrot分形。 我已经validation,日志打开和closures时产生相同的输出。 基准testing运行了100次(所有基准testing库都需要大约10个小时)。 条形图显示平均时间,误差棒显示四分位间距。 Mandelbrot计算的源代码 基准的源代码 。 代码库和文档的根 。 我的问题是,我怎样才能解释当我的日志库启用明显的速度增加? 编辑 :这是在尝试了评论中给出的build议后解决的。 我的日志对象是在基准testing的第24行创build的。 显然,当LOG_INIT()触及日志对象时,它会触发页面错误,导致图像缓冲区的一些或全部页面被映射到物理内存。 我仍然不确定为什么这会将性能提高近半秒; 即使没有日志对象,在mandelbrot_thread()函数中发生的第一件事是写入图像缓冲区的底部,这应该具有类似的效果。 但是,在任何情况下,在开始基准testing之前用memset()清除缓冲区会使得一切更加理智。 目前的基准在这里 其他我试过的事情是: 用oprofile分析器运行它。 即使在将工作放大10分钟左右之后,我也从来没有能够在任何时间注册。 几乎所有的时间都在Mandelbrot计算的内部循环中。 但是,也许现在我知道页面错误,我可以用不同的方式解释它们。 我没有想到要检查图像写入是否花费了不成比例的时间。 卸下锁。 这确实对性能有显着的影响,但结果仍然很奇怪,无论如何,我无法对任何multithreading变体进行更改。 比较生成的汇编代码。 有差异,但日志build设显然是做更多的事情。 没有什么是一个明显的表演杀手。

neo4j与mysql相比的性能(怎么能改进?)

这是一个后续行动, 无法在行动手册中重现/validationgraphics数据库和neo4j中的性能声明 。 我已经更新了设置和testing,不想太多改变原来的问题。 整个故事(包括脚本等)在https://baach.de/Members/jhb/neo4j-performance-compared-to-mysql 简短的版本:当试图validation在“图数据库”书中的性能声明时,我得出以下结果(查询包含n个人的随机数据集,每个数据集有50个朋友): My results for 100k people depth neo4j mysql python 1 0.010 0.000 0.000 2 0.018 0.001 0.000 3 0.538 0.072 0.009 4 22.544 3.600 0.330 5 1269.942 180.143 0.758 “*”:仅限单次运行 My results for 1 million people depth neo4j mysql python 1 0.010 0.000 0.000 2 0.018 0.002 0.000 3 […]

进行JNI调用的数量开销是多less?

仅仅根据性能,大约有多less“简单”的java行是打JNI调用的同等性能? 或者试图用更具体的方式来expression这个问题,如果一个简单的java操作如 someIntVar1 = someIntVar2 + someIntVar3; 被赋予了一个“CPU工作”指数1 ,做JNI调用的开销是什么典型的(ballpark)“CPU工作”指标? 这个问题忽略了等待本地代码执行的时间。 在电话方面,严格来讲,就是通话的“掉旗”部分,而不是“通话费率”。 问这个问题的原因是有一个“经验法则”,知道当你知道本地成本(来自直接testing)和给定操作的Java成本时,何时试图编写一个JNI调用。 它可以帮助您快速避免编写JNI调用的麻烦,只发现调用开销消耗了使用本机代码的任何好处。 编辑: 一些人正在挂起CPU,RAM等变化,这些都是几乎无关的问题 – 我要求的相对成本线的Java代码。 如果CPU和内存不足,对于Java和JNI来说都很差,所以环境因素应该平衡。 JVM版本也属于“不相关”类别。 这个问题并不是要求在毫微秒的绝对时间,而是以“简单的Java代码行”为单位的一个球场“工作努力”。

SQL Server CE 4.0性能比较

SQL Server CE 4(SQL Server Compact Edition 4.0)已不是新闻(如果是,可以阅读本文 ) 但是看到SQL Server CE 4与其他数据库的性能比较是非常有趣的。 特别是: SQLite的 SQL Server(1) SQL Server Express * 也许火鸟 (1)function相当的应用程序。 不幸的是,谷歌现在提供的主题并不多。 其实我无法find任何(适当的SQL CE版本)。 如果可以find或分享这些信息,可以在这里收集,供未来人类使用。