[RAILS] Conseils d'amélioration de la vitesse avec un peu de technologie

Histoire C, C ++ (et autres?)

Incrémenter, décrémenter

Rédaction générale

int i = 1;
i++;

Un tel incrément est appelé incrément post-placé </ b>. Lors de l'utilisation de l'instruction for

for(int i = 0;i < 10000;i++){
}

Comment écrire un peu plus vite

int i = 1;
++i

Un tel incrément est appelé un pré-incrément </ b>.

Lors de l'utilisation de l'instruction for

for(int i = 0;i < 10000;++i){
}

Un petit commentaire

S'il s'agit de post-incrémentation </ b>, une instance sera créée en interne, il semble donc que le traitement prendra un certain temps. Cependant, en raison du développement du compilateur, la plupart d'entre eux ne sont pas disponibles pour le moment. </ Font>

référence

Parler en C, C ++ et de nombreux autres langages

Double écriture

Rédaction générale

int num = 100;
int twice = num * 2;

Comment écrire un peu plus vite

int num = 100;
int twice = num << 1;

Un petit commentaire

"Arithmétique binaire On dit généralement que "c'est plus rapide", mais je pense qu'il y a de nombreux cas où il est difficile de savoir quand utiliser réellement l'arithmétique des bits. Le cas le plus simple à utiliser dans un tel cas n'est-il pas le double de celui ci-dessus? Cependant, à première vue, c'est souvent ??? (cela réduit la lisibilité), il peut donc être préférable de se demander où l'utiliser.

  • Décalage à droite (`num >> 1 '', moitié, 1/2) est un calcul signé (valeur négative),` num / 2 '' et `` `num >> Le résultat de l'exécution peut changer avec 1 ''.
référence

Histoire de la liste

Rédaction générale

List<int> numList = new List<int>();
for(int i = 0;i < 10000;++i){
  numList.Add(i);
}
if(numList.Contain(9999)){
}

Comment écrire un peu plus vite

HashSet<int> numList = new HashSet<int>();
for(int i = 0;i < 10000;++i){
  numList.Add(i);
}
if(numList.Contain(9999)){
}

Un petit commentaire

Lorsque vous utilisez un tableau de longueur variable tel que C # ou Java qui correspond à List (Vector en C ++), si vous écrivez un processus pour déterminer si une valeur existe dans le tableau, le processus équivalent au processus suivant sera exécuté. Je vais.

public bool Contain(int value){
  for(int i = 0;i < this.Count;i++){
    if(this[i] == value){
      return true;
    }
  }
  return false;
}

Par exemple, s'il y a 10 000 données dans cette liste, elle sera vérifiée jusqu'à 10 000 fois. (Un tel traitement est appelé Recherche linéaire Masu) Si vous utilisez HashSet ou Dictionary (HashMap etc. en Java), vous pouvez obtenir la valeur correspondante en un seul processus. Par conséquent, la vitesse est plus rapide car le jugement n'est qu'une seule fois. (Ce type de traitement est appelé Hash Search. Pour plus de détails, voir les références.

référence

Histoire de MySQL

last

Rédaction générale

SELECT id FROM nom de la table ORDER BY DESC LIMIT 1;

Lors de l'utilisation des rails couramment utilisés

ActiveRecord.last.id

Comment écrire super vite

SELECT (information_schema.tables.AUTO_INCREMENT - 1) FROM information_schema.tables WHERE information_schema.tables.TABLE_NAME = 'nom de la table';

Notes </ font>

Un petit commentaire

L'émission d'une instruction ORDRE PAR '' en SQL ralentira le processus à mesure que le nombre de cas augmente, même s'il s'agit de LIMIT 1 ''. (Fondamentalement, le processus de tri est lourd) Par défaut, MySQL a une table qui enregistre des méta-informations telles que diverses valeurs de définition dans MySQL, telles que des informations de table appelées INFORMATION_SCHEMA. Il ne peut être lu qu'à partir de cette table INFORMATION_SCHEMA et la valeur peut être obtenue à l'aide de l'instruction SELECT. Les informations de la table de INFORMATION_SCHEMA enregistrent également les informations du nombre de cas (TABLE_ROWS) et les informations à la fin (AUTO_INCREMENT) de la table. Par conséquent, il peut être exécuté à grande vitesse en acquérant des informations à partir de cette table.

  • Cependant, n'oubliez pas qu'il y a quelques mises en garde.

Autre

S'il y a d'autres cas où la vitesse peut être améliorée en changeant simplement le style d'écriture, je voudrais l'ajouter.