小编Bjö*_*röm的帖子

比参考传递更快地传递值

我用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)

c++ pass-by-reference pass-by-value

46
推荐指数
5
解决办法
2万
查看次数

如何在eclipse中安装MAT

无法弄清楚如何在Eclipse中安装MAT(内存分析器工具).需要这个程序来分析我的Android应用程序漏洞的堆.

觉得愚蠢,抱歉;-(

准确的步骤是什么?

我该怎么做Eclipse?选择Android SDK管理器或转到help => install new software =>然后在字段中输入url字符串(http://download.eclipse.org/mat/1.1/update-site/)?

尝试过两者 - 现在似乎没什么用.

非常感谢您的描述:-)

eclipse-plugin eclipse-memory-analyzer

37
推荐指数
2
解决办法
4万
查看次数

当旧视图返回时,Android setOnCheckedChangeListener再次调用

我无法解决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

30
推荐指数
5
解决办法
7万
查看次数

Java比C快

今天我做了一个简单的测试来比较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)

c java performance

7
推荐指数
2
解决办法
5070
查看次数

尽管使用了弱引用,但内存泄漏

在我的应用程序中,我使用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

5
推荐指数
1
解决办法
1459
查看次数

inDither =真正的Android

有人解释在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中理解这一点.知道何时使用语法是另一回事......另一个是完全理解它.

提前致谢!

android bitmap bitmapfactory

4
推荐指数
1
解决办法
2411
查看次数

示例没有准备好的soundpool

我正在开发一个将短语从英语翻译成另一种语言的应用程序.我使用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)

android soundpool

3
推荐指数
1
解决办法
5546
查看次数

如何在Java中包含度和分钟符号?

有谁知道用于坐标的字符的代码,即经度和纬度?它类似于摄氏的符号,就像'o'

我怀疑它有一个反斜杠的代码.(\ XXXXX)

在此输入图像描述

java utf-8

3
推荐指数
1
解决办法
3039
查看次数

简单循环的速度

我在Java中做了一个简单的循环来测试速度.与C中的相同循环相比,需要更多时间.2十亿次迭代大约需要6.5秒其执行时

如果它被认为是缓慢的 - 可以做些什么来改善性能?

有人会责怪JVM的启动吗?或者 - JIT编译器没有完成它的工作?

  • 平台:windows xp
  • 处理器速度: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)

java performance

3
推荐指数
2
解决办法
337
查看次数

C vs C++ - 使用c语言的优势

顾名思义,C++是C的超集.事实上,C++可以运行大部分C代码而C不能运行C++代码.

例如,与c相比,c ++有几个优点

  • 数据无法隐藏在c语言中
  • c更低级别(这意味着更难理解和编码 - 这意味着更多的错误)
  • c不允许函数重载
  • c不支持异常处理
  • 你可以在C++中使用结构内部的函数,但不能在C中使用

这个列表肯定会更长 - 但是我的问题出现了:与c +​​+相比,c-langauge有什么优势吗?有没有什么比用c ++更好的c?c有c ++缺少的东西吗?

我根本不知道这一点 - 但由于指令集较少,可能比c ++快一点?低级语言可能需要处理器较少的指令.

c c++

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