编者的澄清:当这是最初发布,有两个问题: 如果看起来无关紧要的话,testing性能下降三倍 完成testing所需的时间似乎随机变化 第二个问题已经解决了:随机性只发生在debugging器下运行。 这个问题的其余部分应该被理解为关于上面的第一个要点,并且在VC ++ 2010 Express的发布模式下运行,并且优化“最大化速度”和“优先快速代码”。 评论部分还有一些评论在谈论第二点,但现在可以忽略它们。 我有一个模拟,如果我添加一个简单的if语句到运行实际仿真的while循环中,性能下降大约三倍(我在while循环中运行了大量计算,太阳能的n-body重力系统除了其他东西)即使if语句几乎从未执行: if (time – cb_last_orbital_update > 5000000) { cb_last_orbital_update = time; } time和cb_last_orbital_update都是doubletypes的,并且在主函数的开头定义,if语句也是这样。 通常我也要在那里运行计算,但是如果我删除它们也没有什么区别。 if语句如上所述对性能有相同的影响。 可变time是模拟时间,它在开始时增加了0.001个步骤,所以在第一次执行if语句之前需要很长时间(我还包括打印消息以查看它是否正在执行,但是它不是,或者至less只有当它应该)。 无论如何,即使在仿真的第一分钟内,性能也会下降3倍,但是还没有执行一次。 如果我注释掉这一行 cb_last_orbital_update = time; 那么它又跑得快了,所以这不是检查 time – cb_last_orbital_update > 5000000 无论如何,这绝对是将当前模拟时间写入该variables的简单行为。 另外,如果我将当前时间写入另一个variables而不是cb_last_orbital_update ,则性能不会下降。 所以这可能是一个问题,分配一个新的值,用于检查是否应该执行“if”的variables? 这些都是黑暗中的镜头。 免责声明:我是相当新的编程,并为所有的文字感到抱歉。 我正在使用Visual C ++ 2010 Express,停用stdafx.h预编译头文件function也没有任何区别。 编辑:程序的基本结构。 请注意,在while循环( time += time_interval; )的末尾除了time改变之外, 此外, cb_last_orbital_update只有三次发生:声明/初始化,再加上导致问题的if语句中的两次。 […]
我有以下两个文件: single.cpp: – #include <iostream> #include <stdlib.h> using namespace std; unsigned long a=0; class A { public: virtual int f() __attribute__ ((noinline)) { return a; } }; class B : public A { public: virtual int f() __attribute__ ((noinline)) { return a; } void g() __attribute__ ((noinline)) { return; } }; int main() { cin>>a; […]
我想在Java应用程序上做一些时间testing。 这是我目前正在做的事情: long startTime = System.currentTimeMillis(); doSomething(); long finishTime = System.currentTimeMillis(); System.out.println("That took: " + (finishTime – startTime) + " ms"); 这样的性能testing有什么“错误”吗? 什么是更好的方法? 重复 : 秒表基准testing是否可以接受?
据我所知,所有的脚本语言和核心科学程序通常用C语言编写, 这使得实现混乱,但直接到了一个地步。 我知道这些人想要最大化他们的performance,但使用Cstring和C结构使用C ++类有真正的区别; 除了虚拟函数外,C ++似乎也是以相同的方式工作的,它会一次存储一个类函数,并且该类的每个实例都会调用这个函数。 是什么让C更快,是一个像python或sqlite这样的项目中的一个显着的差异,必须是最快的?
我在Tomcat 7 / Java 7上遇到了一个奇怪而严重的问题,运行了几个(大约15个)Java EE-ish Web应用程序(Hibernate 4 + Spring + Quartz + JSF + Facelets + Richfaces)。 系统运行良好,但经过大量时间后,所有应用程序实例同时突然遭受响应时间的增加。 基本上应用程序仍然有效,但响应时间大约高出三倍。 这是两个图,分别显示了两个示例实例的两个特定工作stream程/操作(login,研讨会访问列表,ajax刷新此列表,注销;下面一行仅仅是ajax刷新的请求时间)的响应时间的申请: 正如你可以看到应用程序的两个实例在同一时间“爆炸”,并保持缓慢。 重新启动服务器后,一切恢复正常。 应用程序的所有实例都“同时爆炸”。 我们将会话数据存储到数据库并将其用于集群。 我们检查了会话的大小和数量,都比较低(这意味着在其他应用程序的服务器上,我们有时会有更多的会话)。 集群中的另一个Tomcat通常会在更长时间内保持快速状态,在这个随机的时间量之后,它也会“死亡”。 我们用jconsole检查了堆的大小,主堆保持在2.5到1 GB的大小,db连接池基本上是充满了空闲的连接,以及线程池。 最大堆大小是5 GB,还有大量的可用的perm gen空间。 负荷不是特别高, 主CPU只有5%的负载。 服务器不交换。 这也没有硬件问题,因为我们另外部署应用程序的问题保持不变的虚拟机。 我不知道该往哪里看,我已经没有想法了。 有人有一个想法在哪里看? 2013-02-21更新:新数据! 我添加了两个更多的时间跟踪到应用程序。 至于测量:监控系统调用执行两个任务的servlet,测量服务器上每个任务的执行时间并将所花费的时间写入响应。 这些值由监控系统logging。 我有几个有趣的新事实:应用程序的热重新部署导致当前Tomcat上的这个单一实例发疯。 这也似乎影响原始的CPU计算性能(见下文)。 这种个人情境爆炸与随机发生的整体情境爆炸是不同的。 现在有一些数据: 首先个人行: 浅蓝色是一个小型工作stream程的总执行时间(细节见上),在客户端测量 红色是淡蓝色的“一部分”,是在客户端测量的执行该工作stream程特殊步骤所需的时间 深蓝在应用程序中进行测量,包括通过Hibernate读取数据库中的实体列表,并遍历该列表,获取懒惰集合和惰性实体。 Green是一个使用浮点和整数运算的小型CPU基准。 据我看到没有对象分配,所以没有垃圾。 现在对于个别的爆炸阶段:我用三个黑点标记每个图像。 第一个是或多或less只有一个应用程序实例的“小”爆发 – […]
这里是我的testing代码,这似乎表明最好连接多次而不是连接一次。 难道我做错了什么? int numIts = 100; Stopwatch sw = new Stopwatch(); sw.Start(); using (SqlConnection connection = new SqlConnection(connectionParameters)) { connection.Open(); for(int i = 0; i < numIts; i++) { SqlCommand command = new SqlCommand(sqlCommandName, connection); command.CommandType = CommandType.StoredProcedure; command.Parameters.AddWithValue(par1Name, par1Val); command.Parameters.AddWithValue(par2Name, par2Val); using(SqlDataReader reader = command.ExecuteReader()) { } } } sw.Stop(); TimeSpan durationOfOneConnectionManyCommands = sw.Elapsed; […]
假设纹理,顶点和着色器数据已经在显卡上,则不需要向卡发送太多的数据。 有几个字节来标识数据,大概是一个4×4的matrix,还有一些其他的参数。 那么所有的开销从哪里来? 这些操作是否需要与gpu进行某种握手? 为什么发送一个包含一堆在CPU上计算的小模型的网格通常比发送顶点ID和变换matrix要快? (第二个选项看起来应该有更less的数据发送,除非模型小于4x4matrix)
像许多人一样,我是一个独立的开发团队。 我负责收集项目需求,devise概念屏幕,规划和开发数据库以及编写所有代码。 成为一个人的团队是好的,但有其负面影响。 我没有能力快速与其他开发人员进行磋商,我很less会看到我的代码,我相信你们也可以提出许多其他的负面看法。 为了充分利用我的时间,并为自己的工作做出最大的贡献,我可以在日常工作中实施哪些技巧或做法,成为最好的单人团队?
正如你们中的一些人可能注意到jsperf已经closures了一段时间。 但我仍然需要分析我的Javascript。 如果没有外部软件的帮助,是否有可能进行比较testing?
当我访问一个使用asp.netbuild立的网站时,经常会经过很长时间的空闲时间,例如一夜之间 – 加载页面需要大约15秒(在我看到任何进度之前的15秒,然后页面快速出现)。 该网站上的其他页面或刷新页面的速度与往常一样快 – 在其他机器上也很快,只有第一个页面似乎需要“打”。 页面跟踪从来没有通过任何事情(整个周期是一个小时) 所以我的问题是我应该在哪里看? 也许IIS? 或者它仍然可以是我的asp.net应用程序,我只是在错误的地方(追踪)寻找线索? 由于我对IIS服务器没有太多的控制,所以我可以通过asp.net检查一下,在我去问那个特定的pipe理员之前,这样做会更有帮助。 干杯:D