Ich habe eine Funktion innerhalb einer Schleife innerhalb einer Funktion. Die innere Funktion erfasst und speichert einen großen Vektor von Daten im Speicher (als eine globale Variable ... Ich benutze "R", was wie "S-Plus" ist). Die Schleife durchläuft eine lange Liste von zu erfassenden Daten. Die äußere Funktion startet den Prozess und übergibt die Liste der zu erfassenden Datensätze.Schlimmere Sünde: Nebenwirkungen oder das Passieren von massiven Objekten?
for (dataset in list_of_datasets) {
for (datachunk in dataset) {
<process datachunk>
<store result? as vector? where?>
}
}
programmierte ich die innere Funktion jeden Datensatz zu speichern, bevor zum nächsten zu bewegen, so dass alle der Arbeit der äußeren Funktion tritt als Nebenwirkungen auf globale Variablen ... ein großen No-No. Ist das besser oder schlechter als das Sammeln und Zurückgeben eines gigantischen, speicherhungrigen Vektorvektors? Gibt es einen überlegenen dritten Ansatz?
Würde sich die Antwort ändern, wenn ich die Datenvektoren lieber in einer Datenbank als im Speicher abspeichern würde? Idealerweise möchte ich die Funktion beenden können (oder sie aufgrund von Netzwerk-Timeouts fehlschlagen lassen), ohne alle Informationen zu verlieren, die vor der Beendigung verarbeitet wurden.
empfehle ich bearbeite diesen Beitrag einige kurze Pseudo-Code enthalten, so dass es einfacher ist, zu sehen, was Sie versuchen, Pseudo-Code zu tun, fügen Sie –
Ja bitte Es ist unmöglich zu wissen, was du meinst. Wenn Sie sagen "Prozess ... und speichern Sie das Ergebnis", meinen Sie "speichern Sie die exakt gleiche Zeichenfolge", oder Vektor (von Ints, verweisende Wörter), oder was? Speichern Sie es als Datensatz in einem riesigen Datenrahmen/Array/Matrix? Geben Sie uns eine Vorstellung von der Anzahl der Zeilen, Spalten, Datei-, Chunk- und Vektorgrößen und Ihrem Arbeitsspeicher? – smci