关于当数据以顺序方式从多个API获取时,如何提高后端的性能?和顺序数据的数据的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于android–如何提高以下代码的性能?、android–如何提
关于当数据以顺序方式从多个 API 获取时,如何提高后端的性能?和顺序数据的数据的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于android – 如何提高以下代码的性能?、android – 如何提高谷歌地方自动填充建议的性能?、c# – 代表如何提高应用程序的性能?、c# – 如何提高这个算法的性能?等相关知识的信息别忘了在本站进行查找喔。
本文目录一览:- 当数据以顺序方式从多个 API 获取时,如何提高后端的性能?(顺序数据的数据)
- android – 如何提高以下代码的性能?
- android – 如何提高谷歌地方自动填充建议的性能?
- c# – 代表如何提高应用程序的性能?
- c# – 如何提高这个算法的性能?
当数据以顺序方式从多个 API 获取时,如何提高后端的性能?(顺序数据的数据)
如何解决当数据以顺序方式从多个 API 获取时,如何提高后端的性能??
我正在创建一个 Nodejs 应用程序,它以顺序方式使用多个服务器的 API,因为下一个请求取决于先前请求的结果。 例如,用户注册是在我们的 Postgresql 数据库平台上完成的。用户提要、聊天、帖子存储在 getStream 服务器上。用户角色和权限通过 CMS 进行管理。如果在页面中我们想根据用户权限显示带有一些按钮的用户关注者列表,那么首先我需要从 getStream 中找到我当前用户的关注者列表,然后用我的 Postgresql 数据库丰富它们,然后从 CMS 获取他们的权限。由于一个请求必须等待另一个请求,因此需要很长时间才能做出响应。 我需要以某种格式提供所有这些数据。我在请求不相互依赖的情况下使用了 Promise.all() 。 我想到了一种方法来存储准备好提供的预处理数据,但我不知道如何做到这一点。解决此问题的最佳方法是什么?
解决方法
作为下一个请求的顺序方式取决于先前请求的结果
您可以尝试使用 async/await,以便每个请求都按顺序运行。
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();} } }
我如何使我的代码如此轻巧的工作非常顺利.平滑的表现意义,适当声明变量,循环,垃圾收集使用等?
解决方法
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; } } }
解决方法
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# – 代表如何提高应用程序的性能?
考虑到它是一个指针.它如何改善应用程序的性能?
如果有人能用一个简单的例子解释这一点,那将会有所帮助.
解决方法
代表的大多数使用与性能无关.让我们从一开始就明确这一点.
但是,这可以用来帮助提高性能的一个主要时间是,它允许像元编程这样的场景.代码(通常是库代码)可以在运行时基于配置信息构建复杂的行为链,然后通过Expression,TypeBuilder或Dynamicmethod(或基本上任何允许您构造IL的API)将该信息编译到方法中.但是要调用这样一个动态生成的方法,您需要一个委托 – 因为从C#编译的静态IL不能引用当时不存在的方法.
请注意,执行此操作的另一种方法是使用TypeBuilder创建(在运行时)从子类继承的新类型或实现已知接口,然后创建动态生成类型的实例,该实例可以强制转换为预期API以通常的方式正常调用.
c# – 如何提高这个算法的性能?
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)))
解决方法
对于搜索,我使用一个子字符串直接在其前缀之前进行序数比较.所以我可以用二进制搜索找到第一个候选人.由于候选人是连续的,我可以用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# – 如何提高这个算法的性能?的相关知识,请在本站寻找。
本文标签: