我用c ++编写了一个简单的程序来比较两种方法之间的性能 - 按值传递并通过引用传递.实际上,传递的值比通过引用传递更好.
结论应该是通过值传递需要更少的时钟周期(指令)
如果有人能详细解释为什么传递值需要更少的时钟周期,我会很高兴.
#include <iostream>
#include <stdlib.h>
#include <time.h>
using namespace std;
void function(int *ptr);
void function2(int val);
int main() {
int nmbr = 5;
clock_t start, stop;
start = clock();
for (long i = 0; i < 1000000000; i++) {
function(&nmbr);
//function2(nmbr);
}
stop = clock();
cout << "time: " << stop - start;
return 0;
}
/**
* pass by reference
*/
void function(int *ptr) {
*ptr *= 5;
}
/**
* pass …Run Code Online (Sandbox Code Playgroud) 无法弄清楚如何在Eclipse中安装MAT(内存分析器工具).需要这个程序来分析我的Android应用程序漏洞的堆.
觉得愚蠢,抱歉;-(
准确的步骤是什么?
我该怎么做Eclipse?选择Android SDK管理器或转到help => install new software =>然后在字段中输入url字符串(http://download.eclipse.org/mat/1.1/update-site/)?
尝试过两者 - 现在似乎没什么用.
非常感谢您的描述:-)
我无法解决getGroupView方法的问题.
问题是监听器setOnCheckedChangeListener被多次调用.
假设我检查某个复选框项.然后我将其滚出视图,然后向后滚动.发生的事情是再次调用侦听器.问题是我将checkbox-id存储在此侦听器内的arraylist中,以便稍后在代码中使用它.结果是每次调用监听器时都会向arraylist添加更多元素并使数据失真.
这个问题有方法解决吗?我该怎么办?我应该取消注册听众吗?
@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
View view = null;
final int group_position = groupPosition;
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.activity_phrase, parent, false);
final ViewHolder viewHolder = new ViewHolder();
viewHolder.text = (TextView) view.findViewById(R.id.groupTitle);
viewHolder.checkBox = (CheckBox) view.findViewById(R.id.check);
viewHolder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
// TODO Auto-generated method stub
if (buttonView.isChecked()) {
checked.add((Integer) viewHolder.checkBox.getTag());
}
else {
checked.remove((Integer) viewHolder.checkBox.getTag()); …Run Code Online (Sandbox Code Playgroud) checkbox android listener expandablelistview android-listview
今天我做了一个简单的测试来比较java和c之间的速度 - 一个简单的循环使整数"i"从0增加到20亿.
我真的希望c语言比java更快.我对结果感到惊讶:
java的时间以秒为单位:约.1.8秒
所花费的时间中对C秒:约.3.6秒
我不认为java是一种更快的语言,但我不明白为什么循环的速度是我简单程序中c的两倍?
我在节目中做了一个至关重要的错误吗?或者是MinGW的编译器配置错误还是什么?
public class Jrand {
public static void main (String[] args) {
long startTime = System.currentTimeMillis();
int i;
for (i = 0; i < 2000000000; i++) {
// Do nothing!
}
long endTime = System.currentTimeMillis();
float totalTime = (endTime - startTime);
System.out.println("time: " + totalTime/1000);
}
}
Run Code Online (Sandbox Code Playgroud)
C程序
#include<stdio.h>
#include<stdlib.h>
#include <time.h>
int main () {
clock_t startTime;
startTime = clock();
int i;
for (i = 0; …Run Code Online (Sandbox Code Playgroud) 在我的应用程序中,我使用listview和listadapter.当点击列表视图中的某个子项时,会有一个可点击的文本视图,它将几个位图加载到滚动视图中 - 此滚动视图显示在alertdialog中.
所有这些都发生在扩展BaseExpandableListAdapter的类中,当单击此textlink时,会调用一个静态内部类来负责加载所有这些(9)位图.这个内部类扩展了asynctask.
在将这些位图加载到scrollview之前 - 调用此内部类的两个静态方法,将bitamps缩小到适合屏幕的大小.这里我使用Bitmapfactory.decoderesource和Bitmap.scaledownBitmap.
所有这些都很有效,但是程序会受到记忆漏洞的影响.这个泄漏之前相当大,因为这个内部类是非静态的.因此,通过使这个内部类静态来减少泄漏.是的 - 减少但没有消除.
我也对几个对象进行了弱推理但没有成功.例如 - 我对引用内部类的对象做了一个弱引用.我已经对传递给内部类的上下文做了一个弱引用.我甚至做了弱位图的弱引用.根本没有成功.
我的三星Galazy s3的堆大小是64 MB.当首次加载包含其所有子项的列表视图时,使用的堆大约为17 MB.然后当加载9个位图时,它会大约为42 MB.如果我然后单击另一个使用图像的子项堆是相同的 - 但在继续单击并加载位图之后,堆突然变为47 MB ...然后相同的场景......静止了一段时间 - 然后高达52 MB .... 56 MB.所以我必须点击并加载位图,以获得内存不足.让我们说15 - 20分钟的密集使用.
结论:使内部类静态帮助我减少内存泄漏.但是,尽管对几个对象(尤其是上下文)进行了微弱的参考,但我还是无法进一步减少泄漏.
有什么建议?
下面的代码有点乱......
static class BitmapWorkerTask extends AsyncTask <Integer, Void, Bitmap[]> {
private int[] data;
private int[] width, height;
private int nmbrOfImages;
private String[] scrollText;
private ImageView mImage;
private View view;
private LayoutInflater factory;
private AlertDialog.Builder alertadd;
private Context context;
private WeakReference <Context> sc;
private WeakReference <ImageView> …Run Code Online (Sandbox Code Playgroud) android memory-leaks weak-references android-listview android-asynctask
有人解释在Android中配置位图的情况下设置inDither = true时真正发生了什么吗?
在Developer.Android中,可以读到静态变量
Config.RGB_565
Run Code Online (Sandbox Code Playgroud)
此配置可能会产生轻微的视觉瑕疵,具体取决于源的配置.例如,没有抖动,结果可能会显示绿色.为了获得更好的结果,应该应用抖动
我有这个问题,直到我遵循这个建议,即:
options.inPreferredConfig = Config.RGB_565;
options.inDither = true;
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:如何在Android中理解这一点.知道何时使用语法是另一回事......另一个是完全理解它.
提前致谢!
我正在开发一个将短语从英语翻译成另一种语言的应用程序.我使用ExpandableListView和通过BaseExpandableListAdapter绑定数据.简而言之:当点击一个listitem时,会打开一个子项目,您可以在其中查看翻译,同时发出语音.问题是偶尔会播放声音 - 特别是对于较长的短语.我在logcat中看到的内容如下:
1)当声音没有播放时......
样品未加载.等待30毫秒.样品X未准备好
2)当声音实际播放时
*未加载样品.等待30毫秒.
因此,即使播放声音,logcat也会告诉"样品没有准备好".
好的,这是logcat给出的信息.另一件事是,对于较大的声音文件,失败的概率更大.小型声音文件播放两秒钟(约30 KB),大约4秒钟(约60 KB).
现在我无法弄清楚如何解决这个问题.我在网上寻找解决方案,尤其是这个网站.我都试过......
1)使用OnLoadCompleteListener()
它不工作
2)制作某种while循环.
也不工作
我有什么不对的.我给出下面的代码.也许有些尴尬?我是否以错误的方式实现了侦听器?
Cincerely
expList.setOnGroupExpandListener(new OnGroupExpandListener() {
public void onGroupExpand(int groupPosition) {
final int group_position = groupPosition;
loaded = false;
int nmbr_childs = adapter.getChildrenCount(groupPosition);
if (nmbr_childs == 1) {
myVoice = soundPool.load(PhraseActivity.this, sound[group_position][0], 2);
soundPool.setOnLoadCompleteListener(new OnLoadCompleteListener() {
@Override
public void onLoadComplete(SoundPool soundPool, int sampleId,
int status) {
loaded = true;
}
});
if (loaded) {
soundPool.play(myVoice, 20, 20, 1, 0, 1f);
}
else { …Run Code Online (Sandbox Code Playgroud) 有谁知道用于坐标的字符的代码,即经度和纬度?它类似于摄氏的符号,就像'o'
我怀疑它有一个反斜杠的代码.(\ XXXXX)
我在Java中做了一个简单的循环来测试速度.与C中的相同循环相比,需要更多时间.2十亿次迭代大约需要6.5秒其执行时
如果它被认为是缓慢的 - 可以做些什么来改善性能?
有人会责怪JVM的启动吗?或者 - JIT编译器没有完成它的工作?
处理器速度:3.4 GHz
public class Jrand {
public static void main (String[] args) {
float f;
long startTime = System.currentTimeMillis();
for (int i = 0; i < 2000000000; i++) {
f = i * 0.0001F;
}
long endTime = System.currentTimeMillis();
float totalTime = (endTime - startTime);
System.out.println("time: " + totalTime/1000);
}
}
Run Code Online (Sandbox Code Playgroud)顾名思义,C++是C的超集.事实上,C++可以运行大部分C代码而C不能运行C++代码.
例如,与c相比,c ++有几个优点
这个列表肯定会更长 - 但是我的问题出现了:与c ++相比,c-langauge有什么优势吗?有没有什么比用c ++更好的c?c有c ++缺少的东西吗?
我根本不知道这一点 - 但由于指令集较少,可能比c ++快一点?低级语言可能需要处理器较少的指令.