GVKun编程网logo

当数据以顺序方式从多个 API 获取时,如何提高后端的性能?(顺序数据的数据)

22

关于当数据以顺序方式从多个API获取时,如何提高后端的性能?和顺序数据的数据的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于android–如何提高以下代码的性能?、android–如何提

关于当数据以顺序方式从多个 API 获取时,如何提高后端的性能?顺序数据的数据的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于android – 如何提高以下代码的性能?、android – 如何提高谷歌地方自动填充建议的性能?、c# – 代表如何提高应用程序的性能?、c# – 如何提高这个算法的性能?等相关知识的信息别忘了在本站进行查找喔。

本文目录一览:

当数据以顺序方式从多个 API 获取时,如何提高后端的性能?(顺序数据的数据)

当数据以顺序方式从多个 API 获取时,如何提高后端的性能?(顺序数据的数据)

如何解决当数据以顺序方式从多个 API 获取时,如何提高后端的性能??

我正在创建一个 Nodejs 应用程序,它以顺序方式使用多个服务器的 API,因为下一个请求取决于先前请求的结果。 例如,用户注册是在我们的 Postgresql 数据库平台上完成的。用户提要、聊天、帖子存储在 getStream 服务器上。用户角色和权限通过 CMS 进行管理。如果在页面中我们想根据用户权限显示带有一些按钮的用户关注者列表,那么首先我需要从 getStream 中找到我当前用户的关注者列表,然后用我的 Postgresql 数据库丰富它们,然后从 CMS 获取他们的权限。由于一个请求必须等待另一个请求,因此需要很长时间才能做出响应。 我需要以某种格式提供所有这些数据。我在请求不相互依赖的情况下使用了 Promise.all() 。 我想到了一种方法来存储准备好提供的预处理数据,但我不知道如何做到这一点。解决此问题的最佳方法是什么?

解决方法

作为下一个请求的顺序方式取决于先前请求的结果

您可以尝试使用 async/await,以便每个请求都按顺序运行。

android – 如何提高以下代码的性能?

android – 如何提高以下代码的性能?

我有以下代码显示一个图像与字母,
public class MainActivity extends Activity 
{
    private String[] capital_letters,small_letters;
    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        this.requestwindowFeature(Window.FEATURE_NO_TITLE);
        this.getwindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.activity_main);
    }

    @Override
    protected void onStart()
    {
        super.onStart();

        try
        {
            capital_letters = getApplicationContext().getResources().getStringArray( R.array.capital_letters );
            small_letters = getApplicationContext().getResources().getStringArray( R.array.small_letters );

            MyAdapter adapter = new MyAdapter ( MainActivity.this,capital_letters,small_letters );
            ListView list = ( ListView ) findViewById( R.id.list );
            list.setAdapter( adapter );

            list.setonItemClickListener( new AdapterView.OnItemClickListener() 
            {
                @Override
                public void onItemClick(AdapterView<?> arg0,View arg1,int position,long id ) 
                {
                    Intent intent = new Intent ( MainActivity.this,Letteractivity.class );
                    intent.putExtra( "position",position );
                    intent.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
                    startActivity(intent);
                    overridePendingTransition( 0,0 );
                }
            });
        }
        catch ( Exception e ){e.printstacktrace();}
    }
}

我如何使我的代码如此轻巧的工作非常顺利.平滑的表现意义,适当声明变量,循环,垃圾收集使用等?

解决方法

看看 this question and all its answers,谈到Android上的性能优化很多.

android – 如何提高谷歌地方自动填充建议的性能?

android – 如何提高谷歌地方自动填充建议的性能?

我在我的应用程序中使用谷歌地方自动填充建议.它工作正常,但我想改善其性能.当用户键入某个地点时,它会在长时间延迟后或有时在删除最后一个字符后给出建议.我如何提高它的性能?
请帮我.
提前致谢

这是我的代码

public class invoice extends Activity
{

AutoCompleteTextView edit_destination;
DownloadTask placesDownloadTask;
DownloadTask placeDetailsDownloadTask;
ParserTask placesParserTask;
ParserTask placeDetailsParserTask;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    // Todo Auto-generated method stub    
    super.onCreate(savedInstanceState);
    requestwindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.create_invoice_activity);

edit_destination=(AutoCompleteTextView) findViewById(R.id.destination);
    edit_destination.setThreshold(1);       

    edit_destination.addTextChangedListener(new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence s,int start,int before,int count) {   
            // Creating a DownloadTask to download Google Places matching "s"
            placesDownloadTask = new DownloadTask(PLACES);

            // Getting url to the Google Places Autocomplete api
            String url = getAutoCompleteUrl(s.toString());

            // Start downloading Google Places
            // This causes to execute doInBackground() of DownloadTask class
            placesDownloadTask.execute(url);
        }

        @Override
        public void beforeTextChanged(CharSequence s,int count,int after) {
            // Todo Auto-generated method stub
        }

        @Override
        public void afterTextChanged(Editable s) {
            // Todo Auto-generated method stub              
        }
    }); 

    edit_destination.setonItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> arg0,View arg1,int index,long id) {

                ListView lv = (ListView) arg0;
                SimpleAdapter adapter = (SimpleAdapter) arg0.getAdapter();

                HashMap<String,String> hm = (HashMap<String,String>) adapter.getItem(index);


                selected_place=hm.get("description");


                // Creating a DownloadTask to download Places details of the selected place
                placeDetailsDownloadTask = new DownloadTask(PLACES_DETAILS);

                // Getting url to the Google Places details api
                String url = getPlaceDetailsUrl(hm.get("reference"));                   

                // Start downloading Google Place Details
                // This causes to execute doInBackground() of DownloadTask class
                placeDetailsDownloadTask.execute(url);

        }
    });     

}


private String getAutoCompleteUrl(String place){

        // Obtain browser key from https://code.google.com/apis/console
        String key = "YOUR KEY";

        // place to be be searched
        String input = "input="+place;

        // place type to be searched
        String types = "types=geocode";

        // Sensor enabled
        String sensor = "sensor=false";         

        // Building the parameters to the web service
        String parameters = input+"&"+types+"&"+sensor+"&"+key;

        // Output format
        String output = "json";

        // Building the url to the web service
        String url = "https://maps.googleapis.com/maps/api/place/autocomplete/"+output+"?"+parameters;

        return url;
    }


    private String getPlaceDetailsUrl(String ref){

        // Obtain browser key from https://code.google.com/apis/console
        String key = "YOUR KEY";

        // reference of place
        String reference = "reference="+ref;                    

        // Sensor enabled
        String sensor = "sensor=false";         

        // Building the parameters to the web service
        String parameters = reference+"&"+sensor+"&"+key;

        // Output format
        String output = "json";

        // Building the url to the web service
        String url = "https://maps.googleapis.com/maps/api/place/details/"+output+"?"+parameters;

        return url;
    }

    /** A method to download json data from url */
    private String downloadUrl(String strUrl) throws IOException{
        String data = "";
        InputStream iStream = null;
        HttpURLConnection urlConnection = null;
        try{
                URL url = new URL(strUrl);

                // Creating an http connection to communicate with url 
                urlConnection = (HttpURLConnection) url.openConnection();

                // Connecting to url 
                urlConnection.connect();

                // Reading data from url 
                iStream = urlConnection.getInputStream();

                BufferedReader br = new BufferedReader(new InputStreamReader(iStream));

                StringBuffer sb  = new StringBuffer();

                String line = "";
                while( ( line = br.readLine())  != null){
                        sb.append(line);
                }

                data = sb.toString();

                br.close();

        }catch(Exception e){
                Log.d("Exception while downloading url",e.toString());
        }finally{
                iStream.close();
                urlConnection.disconnect();
        }
        return data;
     }


    // Fetches data from url passed
    private class DownloadTask extends AsyncTask<String,Void,String>{

        private int downloadType=0;

        // Constructor
        public DownloadTask(int type){
        this.downloadType = type;

        }

        @Override
        protected String doInBackground(String... url) {

            // For storing data from web service
            String data = "";

            try{
                // Fetching the data from web service
                data = downloadUrl(url[0]);
            }catch(Exception e){
                Log.d("Background Task",e.toString());
            }
            return data;        
        }

        @Override
        protected void onPostExecute(String result) {           
            super.onPostExecute(result);        

            switch(downloadType){
            case PLACES:
                // Creating ParserTask for parsing Google Places
                placesParserTask = new ParserTask(PLACES);

                // Start parsing google places json data
                // This causes to execute doInBackground() of ParserTask class
                System.out.println(result);
                placesParserTask.execute(result);

                break;

            case PLACES_DETAILS : 
                // Creating ParserTask for parsing Google Places
                placeDetailsParserTask = new ParserTask(PLACES_DETAILS);

                // Starting Parsing the JSON string
                // This causes to execute doInBackground() of ParserTask class
                placeDetailsParserTask.execute(result);                             
            }           
        }       
    }     


    /** A class to parse the Google Places in JSON format */
    private class ParserTask extends AsyncTask<String,Integer,List<HashMap<String,String>>>{

        int parserType = 0;

        public ParserTask(int type){
            this.parserType = type;
        }

        @Override
        protected List<HashMap<String,String>> doInBackground(String... jsonData) {

            JSONObject jObject;         
            List<HashMap<String,String>> list = null;           

            try{
                jObject = new JSONObject(jsonData[0]);

                switch(parserType){
                case PLACES :
                    PlaceJSONParser placeJsonParser = new PlaceJSONParser();
                    // Getting the parsed data as a List construct
                    list = placeJsonParser.parse(jObject);
                    break;
                case PLACES_DETAILS :                       
                    PlaceDetailsJSONParser placeDetailsJsonParser = new PlaceDetailsJSONParser();
                    // Getting the parsed data as a List construct
                    list = placeDetailsJsonParser.parse(jObject);
                }

            }catch(Exception e){
                Log.d("Exception",e.toString());
            }
            return list;
        }

        @Override
        protected void onPostExecute(List<HashMap<String,String>> result) {

                switch(parserType){
                case PLACES :
                    String[] from = new String[] { "description"};
                    int[] to = new int[] { android.R.id.text1 };

                    // Creating a SimpleAdapter for the AutoCompleteTextView
                    SimpleAdapter adapter = new SimpleAdapter(getBaseContext(),result,android.R.layout.simple_list_item_1,from,to);             

                    // Setting the adapter
                    edit_destination.setAdapter(adapter);                       
                    break;
                case PLACES_DETAILS :                       
                    HashMap<String,String> hm = result.get(0);

                    // Getting latitude from the parsed data 
                     latitude = Double.parseDouble(hm.get("lat"));

                    System.out.println(latitude);

                    // Getting longitude from the parsed data
                     longitude = Double.parseDouble(hm.get("lng"));     
                    System.out.println(longitude);


                    Toast.makeText(invoice.this,latitude+","+longitude,Toast.LENGTH_LONG).show();



                    SharedPreferences pref=getSharedPreferences("LOC",0);


                    String S_lat,S_long;
                   S_lat=pref.getString("LAT","");
                   S_long= pref.getString("LONG",""); 

                    source_lat=Double.parseDouble(S_lat);
                    source_long=Double.parseDouble(S_long);








                    break;                      
                }           
        }           
    }

解决方法

用以下代码替换autocompleteTextView的“addTextChangedListener”方法…

edit_destination.setonKeyListener(new OnKeyListener() {
    public boolean onKey(View arg0,int arg1,KeyEvent arg2) {
        return false;
    }

});
edit_destination.addTextChangedListener(new TextWatcher() {

    @Override
    public void onTextChanged(CharSequence s,int count) {   
        // Creating a DownloadTask to download Google Places matching "s"

        if(placesDownloadTask!=null)
        {                        
              Log.i("--placesDownloadTask--","progress_status : "+placesDownloadTask.getStatus());
              placesDownloadTask.cancel(true);      
        }


    }

    @Override
    public void beforeTextChanged(CharSequence s,int after) {
        // Todo Auto-generated method stub

    }

    @Override
    public void afterTextChanged(Editable s) {
        // Todo Auto-generated method stub      
        String chterm; 
        chterm=edit_destination.getText().toString();
        Log.i("---final selected text---",""+chterm);
        placesDownloadTask = new DownloadTask(PLACES);

        // Getting url to the Google Places Autocomplete api
        String url = getAutoCompleteUrl(s.toString());

        // Start downloading Google Places
        // This causes to execute doInBackground() of DownloadTask class
        placesDownloadTask.execute(url);
    }
});

不是从onTextChanged发出调用,而是从afterTextChanged调用它,它减少了每个字符后的调用次数,从而减少了延迟.

尝试一下,它可能对你有所帮助.

c# – 代表如何提高应用程序的性能?

c# – 代表如何提高应用程序的性能?

我是代表们的新概念.我已经知道它类似于C中的指针.在其优势中,它提到了代表的有效使用提高了性能.

考虑到它是一个指针.它如何改善应用程序的性能?

如果有人能用一个简单的例子解释这一点,那将会有所帮助.

解决方法

代表们并不直接关注提高性能 – 它们是关于抽象调用的.用C语言来说,它确实就像一个方法指针.

代表的大多数使用与性能无关.让我们从一开始就明确这一点.

但是,这可以用来帮助提高性能的一个主要时间是,它允许像元编程这样的场景.代码(通常是库代码)可以在运行时基于配置信息构建复杂的行为链,然后通过Expression,TypeBuilder或Dynamicmethod(或基本上任何允许您构造IL的API)将该信息编译到方法中.但是要调用这样一个动态生成的方法,您需要一个委托 – 因为从C#编译的静态IL不能引用当时不存在的方法.

请注意,执行此操作的另一种方法是使用TypeBuilder创建(在运行时)从子类继承的新类型或实现已知接口,然后创建动态生成类型的实例,该实例可以强制转换为预期API以通常的方式正常调用.

c# – 如何提高这个算法的性能?

c# – 如何提高这个算法的性能?

我有一个文本文件与100000对:字和频率.

test.in文件与文字:

> 1行 – 所有字频对的总计数
> 2行〜〜100 001 – 字频对
> 100 002行 – 用户输入字的总数
>从100 003到最终用户输入字

我解析这个文件并把这些单词放进去

Dictionary<string,double> dictionary;

我想在以下代码中执行一些搜索顺序逻辑:

for(int i=0;i<15000;i++)
{
    tempInputWord = //take data from file(or other sources)

    var adviceWords = dictionary
                .Where(p => p.Key.StartsWith(searchWord,StringComparison.Ordinal))
                .OrderByDescending(ks => ks.Value)
                .ThenBy(ks => ks.Key,StringComparer.Ordinal)
                .Take(10)
                .ToList();

    //some output
}

问题:该代码必须在不到10秒的时间内运行.

在我的电脑(核心i5 2400,8gb RAM)与Parallel.For() – 约91秒.

你能给我一些如何提高性能的建议吗?

更新:

万岁!我们做到了!
谢谢@CodesInChaos,@usr,@T_D和所有参与解决问题的人.

最后的代码:

var kvList = dictionary.OrderBy(ks => ks.Key,StringComparer.Ordinal).ToList();

var strComparer = new MyStringComparer();
var intComparer = new MyIntComparer();
var kvListSize = kvList.Count;
var allUserWords = new List<string>();
for (int i = 0; i < userWordQuantity; i++)
{
    var searchWord = Console.ReadLine();
    allUserWords.Add(searchWord);
}
var result =  allUserWords
    .AsParallel()
    .AsOrdered()
    .Select(searchWord =>
    {
        int startIndex = kvList.BinarySearch(new keyvaluePair<string,int>(searchWord,0),strComparer);
        if (startIndex < 0)
            startIndex = ~startIndex;

        var matches = new List<keyvaluePair<string,int>>();

        bool isNotEnd = true;
        for (int j = startIndex; j < kvListSize ; j++)
        {
            isNotEnd = kvList[j].Key.StartsWith(searchWord,StringComparison.Ordinal);
            if (isNotEnd) matches.Add(kvList[j]);
            else break;
        }
        matches.sort(intComparer);

        var res = matches.Select(s => s.Key).Take(10).ToList();

        return res;
    });
foreach (var adviceWords in result)
{
   foreach (var adviceWord in adviceWords)
   {
       Console.WriteLine(adviceWord);
   }
   Console.WriteLine();
}

6 sec (9 sec without manual loop (with linq)))

解决方法

>按键排序列表< keyvaluePair< string,decimal>>替换字典.

对于搜索,我使用一个子字符串直接在其前缀之前进行序数比较.所以我可以用二进制搜索找到第一个候选人.由于候选人是连续的,我可以用TakeWhile代替Where.

int startIndex = dictionary.BinarySearch(searchWord,comparer);
if(startIndex < 0)
    startIndex = ~startIndex;

var adviceWords = dictionary
            .Skip(startIndex)
            .TakeWhile(p => p.Key.StartsWith(searchWord,StringComparison.Ordinal))
            .OrderByDescending(ks => ks.Value)
            .ThenBy(ks => ks.Key)
            .Select(s => s.Key)
            .Take(10).ToList();

>确保对所有操作使用顺序比较,包括初始排序,二进制搜索和StartsWith检查.>我会在并行循环之外调用Console.ReadLine.可能使用AsParallel().在搜索单词的集合上选择(…)而不是Parallel.For.

关于当数据以顺序方式从多个 API 获取时,如何提高后端的性能?顺序数据的数据的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于android – 如何提高以下代码的性能?、android – 如何提高谷歌地方自动填充建议的性能?、c# – 代表如何提高应用程序的性能?、c# – 如何提高这个算法的性能?的相关知识,请在本站寻找。

本文标签: