如果我想成为Java应用程序和系统的性能顾问,我需要哪些主要技能?
你是否同意这些的重要性?还有什么要补充的?
答案更新:
额外的技能:
心态(由几个答案提供,虽然我没有要求):
Jon Skeet发布了这篇博文,其中他声称他将会问为什么语言的动态部分如此优秀.所以我以为我先发制人地问他:是什么让他们这么好?
假设我有一个方法Foo(),我想测量执行哪种类型的Windows性能计数器应该使用的时间(以毫秒为单位)?
var stopwatch = new Stopwatch();
stopwatch.Start();
Foo();
stopwatch.Stop();
counter.RawValue = stopwatch.TotalMilliseonds;
Run Code Online (Sandbox Code Playgroud)
目前我正在使用NumberOfItems64,但除非执行新操作,否则它会持续计数器的最后一个值.这是可取的吗?或者,一旦操作完成,计数器是否应该变为零?在这种情况下你会选择哪种柜台类型?为什么?
我一直想弄清楚我对统计学的了解.统计数据似乎有用的一个领域是分析代码.我之所以这么说是因为看起来分析几乎总是涉及我试图从大量数据中提取一些信息.
统计数据中是否有任何主题可以用来更好地理解分析器输出?如果您可以指向我的书或其他资源,这将有助于我更好地理解这些主题.
我正在努力尝试加速C中的一些通用数据处理.我已经编写了几种形式的子程序:
double *do_something(double *arr_in, ...) {
double *arr_out;
arr_out = malloc(...)
for (...) {
do the something on arr_in and put into arr_out
}
return arr_out;
}
Run Code Online (Sandbox Code Playgroud)
我喜欢这种风格,因为它易于阅读和使用,但我经常把它称为:
array = do_something(array,...);
Run Code Online (Sandbox Code Playgroud)
如果我改为使用void子函数,它是否会产生更快的代码(并且可能防止内存泄漏):
void do_something(double *arr_in, ...) {
for (...) {
arr_in = do that something;
}
return;
}
Run Code Online (Sandbox Code Playgroud)
更新1:我在可执行文件上运行了valgrind --leak-check = full,并且看起来使用第一种方法没有内存泄漏.但是,可执行文件链接到一个库,该库包含我使用此表单创建的所有子例程,因此它可能无法捕获库中的泄漏.
我很好奇我将如何编写包装来释放内存以及**真正做什么,或指针指针是什么,所以我避免使用**路径(也许我做了它错了,因为它没有在我的mac上编译).
这是一个当前子例程:
double *cos_taper(double *arr_in, int npts)
{
int i;
double *arr_out;
double cos_taper[npts];
int M;
M = floor( ((npts - 2) / 10) + .5);
arr_out = …Run Code Online (Sandbox Code Playgroud) 提高C代码性能的最不正统的方法是什么?这是无保留的!一切都包括将循环结构改为gotos,硬编码任何东西,以奇怪的方式使用案例陈述等.不要担心可维护性,可读性等.
ps这很实用......而且我很清楚如何以合理的方式提高代码的性能(在优化之前改进算法,配置文件等)
我目前正在阅读Erich Gamma和其他人的"设计模式:可重复使用的面向对象软件的元素".我决定做一些小项目来查看将设计模式应用到我编写的软件的实际结果.
我应该对实施它们有多严格?我在互联网上看到了一些实现解释器模式的例子,它只是跳过了实现中的整个类/接口/方法.应该允许一个人做同样的事情,还是更好地严格执行以避免未来的问题,即预先支持功能?或者设计模式是不是被视为一切的答案,是否应该以适用于当前情况的方式应用,即特定于代码?
在我正在编写的游戏中,我使用了我编写的2D矢量类来处理对象的速度.由于屏幕上有很多物体,因此每帧都会调用很多次,因此我可以在其速度上增加任何增量.
它非常简单,主要由相关数学函数的包装器组成.在C中重写是非常简单的,但我不确定这样做是否会产生任何显着的差异,因为它实际上只是调用基础数学函数,加法,乘法或除法.
所以,我的问题是在什么情况下在C中重写是有意义的?你会在哪里看到显着的速度提升,在哪里可以看到合理的速度提升而无需重写大量的程序?
对于在我们手动重启机器之前从未退出的应用程序分析我有一个小小的疑问.
我使用像valgrind这样的工具来讨论内存泄漏或任何在某个时间后退出的应用程序的膨胀.
但有没有任何工具可以用来告诉应用程序在各个阶段创建的内存消耗,膨胀和开销,如果可能的话?
注意:我更感兴趣的是了解不退出的应用程序...如果应用程序退出,我可以使用像valgrind这样的工具..
我正在编写一个应用程序,我需要以极低的处理器速度运行.应用程序在整个运行过程中以创造性的方式创建和销毁内存,并且工作得很好.什么编译器优化发生,所以我可以尝试构建到那个?
另一个技巧是CLR处理数组比列表快得多,所以如果你需要处理List中的大量元素,你可能最好调用ToArray()并处理它而不是一次又一次地调用ElementAt() .
c ×4
performance ×4
optimization ×3
.net ×2
memory ×2
profiling ×2
c# ×1
c++ ×1
clr ×1
diagnostics ×1
il ×1
java ×1
math ×1
open-source ×1
perfmon ×1
python ×1
return ×1
statistics ×1
void ×1