Tag: 优化

衡量查询性能:“执行计划查询成本”与“时间”

我试图确定两个不同的查询的相对performance,并有两种方法来衡量这一点对我来说: 1.运行两个和每个查询时间 2.运行并从实际执行计划中获得“查询成本” 这是我运行查询时间的代码… DBCC FREEPROCCACHE GO DBCC DROPCLEANBUFFERS GO DECLARE @start DATETIME SET @start = getDate() EXEC test_1a SELECT getDate() – @start AS Execution_Time GO DBCC FREEPROCCACHE GO DBCC DROPCLEANBUFFERS GO DECLARE @start DATETIME SET @start = getDate() EXEC test_1b SELECT getDate() – @start AS Execution_Time GO 我得到的是以下内容: Stored_Proc Execution_Time Query Cost (Relative To […]

在MySQL中加快行数

假设,出于说明的目的,您正在运行一个使用简单的MySQL“books”表的三个列的库: (ID,标题,状态) id是主键 标题是书的标题 状态可能是描述本书当前状态的枚举(例如,AVAILABLE,CHECKEDOUT,PROCESSING,MISSING) 一个简单的查询来报告每个州有多less本书是: SELECT status, COUNT(*) FROM books GROUP BY status 或者专门查找有多less本书可用: SELECT COUNT(*) FROM books WHERE status = "AVAILABLE" 但是,一旦表增长到数百万行,这些查询需要几秒钟才能完成。 在“状态”列中添加一个索引似乎并不会改变我的体验。 除了定期caching结果,或者在每次书籍更改状态(通过触发器或其他机制)时,在一个单独的表格中显式更新汇总信息,有没有什么技术可以加快这类查询的速度? 看起来COUNT查询最终只能查看每一行,而(不知道更多的细节)我有点惊讶,这个信息不能以某种方式从索引中确定。 UPDATE 使用具有200万行的示例表(具有索引“状态”列),我对GROUP BY查询进行了基准testing。 使用InnoDB存储引擎,查询在我的机器上需要3.0 – 3.2秒。 使用MyISAM,查询需要0.9-1.1秒。 在这两种情况下,计数(*),计数(状态)或计数(1)之间没有显着差异。 MyISAM肯定有点快,但我很好奇,看看有没有办法让等效查询的运行速度更快(例如,10-50毫秒 – 足够快,可以在每个网页请求中调用低stream量站点)没有caching和触发器的精神开销。 这听起来像答案是“没有办法快速运行直接查询”,这是我所期望的 – 我只是想确保我没有错过一个简单的select。

什么是生产代码的一些很好的CSS和JS最小化?

我正在寻找一些最小化css和js文件的应用程序或网站。 理想情况下,他们可以一次一批或全部批次。

有用的Android系统资源

Android提供了大量的系统资源( android.R ),可以节省您的时间,使您的应用程序更轻松。 例如,我最近发现Android为Yes( android.R.string.yes ),No( android.R.string.no ),Cancel( android.R.string.cancel )和Ok( android.R.string.ok )提供了本地化的stringandroid.R.string.ok )等string。 你推荐使用什么其他系统资源? 或者有没有理由避免使用系统资源? 编辑:正如托马斯指出的,这些资源中的一些可能不会产生你期望的结果(尤其是android.R.string.yes/no返回OK/Cancel而不是Yes/No ,正如这里所报道的那样)。 为了更好地控制,您可以从Android源代码复制系统资源。

现代C ++编译器能否避免在某些情况下调用const函数两次?

例如,如果我有这个代码: class SomeDataProcessor { public: bool calc(const SomeData & d1, const SomeData & d2) const; private: //Some non-mutable, non-static member variables } SomeDataProcessor sdp; SomeData data1; SomeData data2; someObscureFunction(sdp.calc(data1, data2), sdp.calc(data1, data2)); 让我们考虑潜在的等价代码: bool b = sdp.calc(data1, data2); someObscureFunction(b,b); 为了使这是有效的, calc()函数应该满足一些要求,对于这个例子,我调用属性_pure_const_formula_ _pure_const_formula_会: 不改变任何成员,静态或全局variables状态 只调用_pure_const_formula_函数 也许还有一些其他的条件,我不记得 例如,调用一个随机数生成器将不符合这些要求。 编译器是否允许用第二个代码replace第一个代码,即使它需要recursion地挖掘到被调用的函数? 现代编译器能做到这一点吗?

class class [B在Java中代表什么?

我正在尝试一个工具在这里testing我的Java内存使用情况。 它读入一个堆转储文件并将信息打印为html。 但是,这些表格显示如下: Class Instance Count Total Size class [B 36585 49323821 class [Lcom.sun.mail.imap.IMAPMessage; 790 16254336 class [C 124512 12832896 class [I 23080 11923504 class [Ljava.lang.Object; 13614 6664528 class java.lang.String 108982 2179640 class java.lang.Integer 219502 878008 这些是什么[B [C等级?

内存分配/释放瓶颈?

在典型的真实世界的程序中,内存分配/释放有多less瓶颈? 来自任何types的性能通常很重要的程序的答案是受欢迎的。 malloc / free / garbage collection的体面实现是否足够快,以至于它只是在几个极端情况下的一个瓶颈,或者大多数性能关键型软件会从试图保持内存分配量下降或拥有更快的malloc / free /垃圾回收的实现? 注意:我不是在这里谈论实时的东西。 对性能至关重要,我的意思是吞吐量很重要,但延迟并不一定。 编辑:虽然我提到malloc,这个问题并不打算是特定于C / C ++。

HTML5 Canvas性能和优化技巧,技巧和编码最佳实践

你知道一些帆布的最佳实践吗? 请添加到这个线程你知道,已经学到,或已经在线阅读了任何和所有的帆布最佳实践,性能提示/技巧 由于canvas对于互联网来说还是一个新的东西,而且没有迹象显示它将来会变老,所以并没有太多记载的“最佳实践”或其他非常重要的提示,这些提示是“必须知道的”它在任何一个特定的地方。 像这样的东西散落在许多不为人知的地方。 人们需要了解的东西太多了,而且还要学习太多东西。 我想分享一些东西来帮助那些正在学习Canvas的人,也许一些人已经很了解它,并希望从别人那里得到一些他们觉得是一些最佳实践的反馈,或者在HTML5中使用Canvas的其他技巧和窍门。 我想从一个我个人发现对开发人员来说相当有用但出人意料的事情开始。 1.缩进你的代码 就像你在其他任何时候一样,用任何其他语言,无论这种情况如何。 对于其他任何事情来说,这都是最佳实践,而且我发现,在复杂的canvas应用程序中,在处理几个不同的上下文和保存/恢复状态时,可能会有些混乱。 更不用说代码只是更可读,整体更清洁。 例如: … // Try to tell me this doesn't make sense to do ctx.fillStyle = 'red'; ctx.fill(); ctx.save(); if (thing < 3) { // indenting ctx.beginPath(); ctx.arc(2, 6, 11, 0, Math.PI*2, true); ctx.closePath(); ctx.beginPath(); ctx.moveTo(20, 40); ctx.lineTo(10, 200); ctx.moveTo(20, 40); ctx.lineTo(100, 40); ctx.closePath(); ctx.save(); […]

返回64位整数中所有设置位的位置的最快方法是什么?

我需要一个快速的方法来获得一个64位整数的所有位的位置。 例如,给定x = 123703 ,我想填充一个数组idx[] = {0, 1, 2, 4, 5, 8, 9, 13, 14, 15, 16} x = 123703 idx[] = {0, 1, 2, 4, 5, 8, 9, 13, 14, 15, 16} 。 我们可以假设我们知道比特数的先验。 这将被称为10 ^ 12 – 10 ^ 15倍,所以速度是至关重要的。 到目前为止,我提出的最快答案是下面的怪异问题,它使用64位整数的每个字节作为表中的索引,给出该字节中设置的位数和位置: int64_t x; // this is the input unsigned char idx[K]; // this […]

为什么绘制电话昂贵?

假设纹理,顶点和着色器数据已经在显卡上,则不需要向卡发送太多的数据。 有几个字节来标识数据,大概是一个4×4的matrix,还有一些其他的参数。 那么所有的开销从哪里来? 这些操作是否需要与gpu进行某种握手? 为什么发送一个包含一堆在CPU上计算的小模型的网格通常比发送顶点ID和变换matrix要快? (第二个选项看起来应该有更less的数据发送,除非模型小于4x4matrix)