有没有比使用C++列表容器的比较运算符更有效地按字节比较数据的方法?
我要比较[大?10 kByte <size <500 kByte]按字节数量的数据,以验证外部存储设备的完整性.
因此,我按字节顺序读取文件并将值存储在无符号字符列表中.此列表的资源由shared_ptr处理,因此我可以在程序中传递它,而无需担心列表的大小
typedef boost::shared_ptr< list< unsigned char > > = contentPtr;
namespace boost::filesystem = fs;
contentPtr GetContent( fs::path filePath ){
contentPtr actualContent (new list< unsigned char > );
// Read the file with a stream, put read values into actual content
return actualContent;
Run Code Online (Sandbox Code Playgroud)
这样做了两次,因为文件总是有两个副本.必须比较这两个文件的内容,如果发现不匹配则抛出异常
void CompareContent() throw( NotMatchingException() ){
// this part is very fast, below 50ms
contentPtr contentA = GetContent("/fileA");
contentPtr contentB = GetContent("/fileB");
// the next part takes about 2secs with …Run Code Online (Sandbox Code Playgroud) 在我的初始化方法中,我调用其他一些方法,操作一些变量并迭代一些列表.现在我注意到加载方法需要一点点(大约2分钟).
但问题是,我不太确定该方法的哪一部分消耗了这么长时间.所以我想测量它,以便我可以在这个最有可能减少时间的部分上工作.
但衡量这一点的好方法是什么?
动机:我不能让google cpu profiler在代码运行的机器上工作(我的最后一口气我诅咒libunwind :)),所以我想知道gdb是否支持高频随机暂停程序执行,存储函数的名称发生中断并计算它在函数x中暂停的次数.这就是我所谓的"运行时采样",可能有更精确/更智能的名称.我查看了oprofile,但它很复杂到a)弄清楚它是否可以做到这一点b)弄清楚如何做它编辑:显然正确的名称是:"统计抽样方法"
编辑2:为什么我为此提供赏金的原因是我在SO上看到一些人推荐手动中断10-20x并用bt检查堆栈...当谈到时间时似乎非常浪费,所以我猜测一些智能ppl自动化它.:)
EDIT3:gprof不会削减它...我最近在ARM系统上尝试运行它并且输出是垃圾...... :(我猜它多线程的麻烦就是这个原因......
我有VS 2010旗舰版.我创建了空的win32控制台解决方案并用http://pastebin.com/EQJKJK6T替换了它的cpp文件我试图执行CPU采样分析.但由于某种原因,我得到以下消息
消息框:
无法启动'exe文件的路径'.以前尝试分析应用程序的尝试未成功完成.请重启应用程序.
输出窗口:
Run Code Online (Sandbox Code Playgroud)Profiling started. Warning VSP2355: Some Windows counters will not be collected. Without this data, some performance rules may not fire. Profiling process ID 4368 (test). Process ID 4368 has exited. Data written to e:\projects\test\test101224.vsp. Profiling finished. PRF0025: No data was collected. Profiling complete.
我想知道像 quantify 这样的产品如何在不修改代码的情况下测量函数/方法中花费的时间。有人知道吗?
您是否有描述如何开始编写自己的工具的网页?
我最近安装了Visual Studio 2008 TS(eval),以便能够对应用程序进行一些分析.现在我只知道当应用程序比"Hello World"更复杂时我对(真实世界)分析知之甚少.
我的主要问题是集成调试器似乎增加了所有线程所花费的时间,所以我得到总运行时间的几倍,某些函数(如sleep)会出现几次,我假设它们被多个线程调用.
现在我的问题是:我怎样才能让这个更容易检查?我只感兴趣的一个主题(主要是完成所有工作),其他人只是在等待某些东西,完全受到主线程运行时间的限制.(它们在相同的模块中,有时也称为相同的功能.)
有没有办法设置分析?有什么方法可以处理结果,以使它们对我的场景更有意义吗?除VS 2008之外的任何其他解决方案(如2010或外部探查器)?
我现在正在使用仪器(在我的视图中给出了比在我的视图中采样更好的结果)和.net 3.5下的C#.
我正在寻找软件来进行基准测试,分析,代码和应用程序的性能.像英特尔VTune这样的东西.
任何人都可以给我一些名字,免费或付费,针对c#apps.
谢谢
我有一个Ruby程序,大约需要4分钟才能完成任务,我想把它降到1分钟以下.
我尝试了宝石中的ruby-prof,但是它使运行时间增加到约30分钟,甚至看起来都没有特别好地保持单调性(一些变化可靠地提高了性能 - 使用剖析器并且可靠地降低了性能 - 没有剖析器).此任务也无法真正分解为可以独立进行有意义分析的部分.
目前以最低开销分析Ruby代码的最佳方法是什么?
我使用OSX,但如果由于任何原因,探测器需要另一个操作系统,我可能会重新启动.
编辑:perftools.rb具有更低的开销,但结果看起来相当可疑诚实,超出任何合理的抽样错误 - 至少它必须搞乱GC或i/o缓冲或类似的东西,导致很多愚蠢的错误归因.它仍然击败了ruby-prof.
我会保持问题公开,万一有人知道比这更好的事情.
我可以使用哪些免费工具来测试Linux中C++代码的性能?基本上我想确定代码的瓶颈并提高性能.我的应用程序主要涉及使用来自网络的数据的计算代码.所以我想提高代码的执行速度.
谢谢.
profiling ×5
performance ×4
c# ×3
c++ ×3
profiler ×2
analysis ×1
benchmarking ×1
comparison ×1
containers ×1
gdb ×1
linux ×1
optimization ×1
ruby ×1
ruby-prof ×1
stl ×1
vsperfmon ×1