相关疑难解决方法(0)

用于分析.NET Compact Framework应用程序性能的工具

我发现的唯一的东西是EQATEC Profiler.是否还有其他可用于配置.NET CF应用程序的分析器?

.net performance profiling compact-framework

9
推荐指数
1
解决办法
5792
查看次数

什么时候优化真的值得花费在它上面的时间?

在我的上一个问题之后,我想了解何时优化确实值得开发人员花费时间.

是否值得花4个小时来查询速度提高20%?是的,不,也许,是的,如果......?

"浪费"7个小时将任务切换到另一种语言以节省大约40%的CPU使用量"值得"吗?

我对新项目的正常迭代是:

  1. 了解客户想要什么,以及他需要什么;
  2. 规划项目:什么语言和地点,数据库设计;
  3. 开发项目;
  4. 测试和错误修复;
  5. 对正在运行的项目和最终优化的最终分析;
  6. 如果项目需要,则进一步分析资源的实际使用情况,然后进一步优化;

隐含着"编写好的,可维护的代码".

显然,大的"优化"部分发生在第2点,但通常在项目结束后审查代码时,我发现一些部分,即使他们做得好,也可以改进.这是第5点的基本原理.

为了给出最后一点的具体示例,一个简单的例子是当我期望90%的查询SELECT和10%的查询时INSERT/UPDATE,所以我对带有索引的数据库表收费.但是在6个月之后,我发现在现实生活中有10%的SELECT查询和90%的INSERT/UPDATEs,所以查询速度没有得到优化.这是第一个出现在我脑海中的例子(显然,对于最初的错误设计而言,这不仅仅是优化的"补丁").

请注意,我是一名开发人员,而不是商人 - 但我希望尽可能让我的客户尽可能地保持良心.

我的意思是,我知道如果我失去了50个小时来获得应用程序总速度的5%,并且该应用程序被10个用户使用,那么它可能不值得花时间......但它是什么时候它是什么时候?

您认为优化何时至关重要?

你通常使用什么公式,意识到优化所花费的时间(以及最终的收益)并不总是可以在纸上量化?

编辑:对不起,但我不能接受像"直到人们不抱怨id,不需要优化"这样的答案; 它可以是一个商业视图(可疑,imho),但不是开发人员或(imho)一个良好的答案.我知道,这个问题确实很主观.

我同意Cheeso,性能优化应推迟,对项目的真实使用情况和负载一些分析,但small'n'quick优化可以立刻后项目结束来完成.

谢谢大家 ;)

optimization performance web-applications

9
推荐指数
3
解决办法
400
查看次数

Mono.Cecil可以修改已经加载在AppDomain中的代码吗?

我想在运行时向某个类添加一些行为.我知道如何在运行时使用Reflection.Emit进行子类化,但这还不够,根据一些外部配置,我需要在类型T上的方法中注入操作码,以便从中继承的所有类自动获得此行为.(我无法使用.NET分析API)

可以用Mono.Cecil完成这样的事吗?

如果不能修改加载的程序集上的代码,那很好.如果我可以在加载程序集之前进行修改然后将修改后的程序集加载到内存中,但我不知道如何控制程序集加载.

.net c# profiling intermediate-language mono.cecil

9
推荐指数
1
解决办法
2542
查看次数

在PHP中分析超过函数调用

我已经开始使用PHP开始我的第一个有点认真的编程项目,并且很难获得良好的分析信息.我使用xdebug和cachegrind来分析代码,但它假设函数的"自我"执行时间是函数执行所花费的总时间减去它调用的任何函数的聚合时间.

虽然这本质上是正确的,但是当我尝试优化代码时,它没有多大帮助.例如,我有一个带有两个if语句的简单函数,它返回一个带有两个值的数组,根据xdebug,它占总执行时间的26%.它使用array_key_exists,我可以看到这些函数调用的执行时间约为1%.我看不到的是其他25%的执行时间如何与其余代码相比较.if语句需要多长时间,获取值对,将这些值放入数组中,然后返回数组?

我在文档中遗漏了一些xdebug标志吗?或者是否有PHP的分析工具,它将分析变量赋值,运算符,基本数据类型的构造以及其他非函数调用?优选地,不假设脚本可通过web服务器获得的东西.

我正在寻找的东西的一个例子是perl的nytprof.请注意,它描述了函数中的每一行代码(除了最后一次推送,它永远不会被执行).

php performance profiling

9
推荐指数
1
解决办法
1078
查看次数

Linux上的挂载时间分析

我有一个应用程序,我想知道在各种活动中花了多少时间.由于这个应用程序是I/O密集型的,我想得到一个报告,总结每个库/系统调用(挂起时间)花费了多少时间.

我尝试过oprofile,但似乎它给出了Unhalted CPU周期的时间(那就是cputime,而不是实时)

我已经尝试了strace -T,它给出了墙上的时间,但是生成的数据很大并且很难获得摘要报告(并且存在awk/py脚本?)

现在我正在寻找SystemTap,但我找不到任何足够接近且可以修改的脚本,现场教程也没有多大帮助.我不确定我能找到的是什么.

我需要有人指出我正确的方向.非常感谢!

profiling strace systemtap

9
推荐指数
2
解决办法
1818
查看次数

Fortran查询和打印输出函数或子例程名称

在Fortran中是否可以查询我所在的函数或子例程的名称?即,我应该代替'???' 让它在屏幕上打印'my_subroutine'?

subroutine my_subroutine()
   write(*,*) ???
end subroutine my_subroutine
Run Code Online (Sandbox Code Playgroud)

我试图找到一种方法来实现自定义调试器/分析器,只使用文本编辑器的搜索和替换机制.以编程方式查询我在代码中的位置会很有帮助.

debugging profiling fortran

9
推荐指数
2
解决办法
2008
查看次数

我的库中的更改使它变得更慢.分析对我没有帮助.减速的原因可能是什么?

简而言之,我的问题

我对我的库进行了更改,现在速度要慢得多,但我无法弄清楚它花费了多少时间.分析报告没有帮助.请帮我弄清楚原因是什么.

一些背景

我创建了一个名为Hedis的Redis客户端库,并为它准备了一个基准程序.现在,我对库进行了一些内部更改,以清理架构.这导致性能(按所述基准测量的每秒Redis请求数)下降约2.5倍.

基准测试打开与localhost上的Redis服务器的50个网络连接.两个版本之间的连接处理方式不同:

  • 快速版本每个连接使用一个线程(因此,基准测试有50个并发运行的线程).它通过使用unsafeInterleaveIO(我在博客文章中广泛描述我的方法)从套接字句柄读取.我对建筑有点不满意,因此我改变了方向
  • 每个连接使用三个线程的慢速版本.它们通过两个Chans进行通信(150个线程在基准测试中运行).

可能相关的更多信息:

  • 用GHC 7.2.2编译.
  • 基准程序在两个版本之间没有变化,因此网络流量是相同的.
  • 两个版本都使用单线程运行时( 编译-threaded).
  • 所有线程都是通过调用创建的forkIO.不是更贵 forkOS.

分析结果

分析并没有给我一个明显的理由,表明性能下降.根据该分析报告,这两个版本花费的时间超过99%System.IO.hFlushData.ByteString.hGetSome.的次数hFlushhGetSome被称为是在两个版本相同.由于网络流量在两种情况下也相同,因此这些功能不能成为减速的原因.

我可以在两个版本之间测量的唯一显着差异是time(Unix实用程序)告诉我的:慢速版本(线程数量是其三倍)在"sys"而不是"user"中花费的时间明显多于快速版本版.GHC +RTS -s标志将此报告为降低了生产率.

以下是带有+RTS -s标志的两个版本的程序输出:

快速版的基准

$ time ./dist/build/hedis-benchmark/hedis-benchmark +RTS -s -p
ping                   33305.29 Req/s
get                    25802.92 Req/s
mget                   18215.94 Req/s
ping (pipelined)      268994.36 Req/s
   5,118,163,904 bytes allocated in the heap …
Run Code Online (Sandbox Code Playgroud)

profiling haskell ghc

9
推荐指数
1
解决办法
511
查看次数

如何使用谷歌perf工具

我刚开始使用谷歌性能工具(google-perftools以及libgoogle-perftools4ubuntu中的软件包),我发誓我正在谷歌上搜索一天,我没有找到答案!问题是我没有通过CPU分析获得所有函数的结果.这是我的代码:

#include "gperftools/profiler.h"
#include <iostream>
#include <math.h>
using namespace std;
void bar()
{
        int a,b,c,d,j,k;
        a=0;
        int z=0;
        b = 1000;
        while(z < b)
        {
                while (a < b)
                {
                        d = sin(a);
                        c = cos(a);
                        j = tan(a);
                        k = tan(a);
                        k = d * c + j *k;
                        a++;
                }
                a = 0;
                z++;
        }
}
void foo()
{
        cout << "hey " << endl;
}

int main()
{
        ProfilerStart("/home/mohammad/gperf/dump.txt");

        int a = 1000; …
Run Code Online (Sandbox Code Playgroud)

profiling gperftools

9
推荐指数
1
解决办法
2万
查看次数

在C++中使用std :: vector会有什么性能损失?

通常,我很想知道标准模板库是否会在数值/科学计算的代码中产生性能/速度开销.

例如.将数组声明为

double 2dmatrix [10][10]
Run Code Online (Sandbox Code Playgroud)

会给我更多的表现

std::vector<std::vector<double> > 2dmatrix(10,std::vector<double>(10,0.0))
Run Code Online (Sandbox Code Playgroud)

我还要感谢一些一般性的想法,关于C在科学计算方面是否具有比C++更好的性能.我使用STL以非常面向对象的方式编写了我的代码,并且使用了C++ 11.我开始考虑是否应该开始研究纯C,如果它运行得更快.

对此有任何想法都是受欢迎的.

c++ performance vector scientific-computing c++11

9
推荐指数
2
解决办法
5397
查看次数

为什么我不使用get_unchecked()来提高性能?

我尝试使用get_unchecked()而不是[]索引运算符来获得s()我的des箱子功能的性能提升.

但是,即使在我的基准测试中将[](或get_unchecked())函数调用了48亿次,它也不会导致可见的性能提升.我原本认为,调用get_unchecked()48亿次而不是[]将使我的英特尔酷睿2双核2.4 GHz处理器的时间缩短2秒.

我做了这个小基准测试,有一个小代码向您展示:

#![feature(test)]

extern crate test;

fn main() {
}

pub fn s(box_id: usize, block: u64) -> u64 {
    const TABLES: [[[u64; 16]; 4]; 8] =
        [[[ 14,  4, 13, 1,  2, 15, 11,  8,  3, 10,  6, 12,  5,  9, 0, 7]
        , [  0, 15,  7, 4, 14,  2, 13,  1, 10,  6, 12, 11,  9,  5, 3, 8]
        , …
Run Code Online (Sandbox Code Playgroud)

optimization performance assembly rust

9
推荐指数
1
解决办法
356
查看次数