J'ai une fonction dans une boucle à l'intérieur d'une fonction. La fonction interne acquiert et stocke un grand vecteur de données en mémoire (en tant que variable globale ... J'utilise "R" qui est comme "S-Plus"). La boucle boucle une longue liste de données à acquérir. La fonction externe démarre le processus et passe dans la liste des jeux de données à acquérir.Pire péché: effets secondaires ou passage d'objets massifs?
for (dataset in list_of_datasets) {
for (datachunk in dataset) {
<process datachunk>
<store result? as vector? where?>
}
}
I programmé la fonction interne pour stocker chaque jeu de données avant de passer à l'autre, de sorte que tous les travaux de la fonction extérieure se produit comme effets secondaires sur les variables globales ... un grand no-no. Est-ce mieux ou pire que de collecter et de restituer un vecteur géant de vecteurs vecteurs de mémoire? Y a-t-il une troisième approche supérieure?
La réponse changerait-elle si je stockais les vecteurs de données dans une base de données plutôt qu'en mémoire? Idéalement, j'aimerais pouvoir mettre fin à la fonction (ou la faire échouer en raison de dépassements de délai réseau) sans perdre toutes les informations traitées avant la résiliation.
Je recommande éditer ce post pour inclure une brève pseudocode il est plus facile de voir ce que vous essayez de faire –
Oui s'il vous plaît ajouter pseudocode , impossible de savoir ce que tu veux dire. Quand vous dites "traiter ... et stocker le résultat", voulez-vous dire "stocker exactement la même chaîne", ou vecteur (des ints, des mots référents), ou quoi? Est-ce que vous le stockez comme un enregistrement dans un énorme dataframe/array/matrix? Donnez-nous une idée du nombre de lignes, de colonnes, de fichiers, de tailles de blocs et de vecteurs, et de votre mémoire de travail? – smci