Ich habe 4 Dictionarys, die 800k Strings mit 200 bis 6000 Zeichen enthalten. Wenn ich es in den Speicher laden, dauert es etwa 11 GB Speicher. dauert es 2 Minuten, um die Daten zu analysieren und 2 Minuten, um die Daten auszugeben. gibt es sowieso, um die Daten schneller als das, was ich unten verwende, auszugeben? Ich erhalte nur 20-31 MB pro Sekunde Disk IO und ich weiß, dass die Festplatte 800ish tun könnenAusgabe Wörterbuch optimal
var hash1 = new Dictionary<int, Dictionary<string, string>>(f.Count + 2);
var hash2 = new Dictionary<int, Dictionary<string, string>>(f.Count + 2);
var hash3 = new Dictionary<int, Dictionary<string, string>>(f.Count + 2);
var hash4 = new Dictionary<int, Dictionary<string, string>>(f.Count + 2);
....
foreach (var me in mswithfilenames)
{
filename = me.Key.ToString();
string filenamef = filename + "index1";
string filenameq = filename + "index2";
string filenamefq = filename + "index3";
string filenameqq = filename + "index4";
StreamWriter sw = File.AppendText(filenamef);
StreamWriter sw2 = File.AppendText(filenameq);
StreamWriter swq = File.AppendText(filenamefq);
StreamWriter sw2q = File.AppendText(filenameqq);
for (i = 0; i <= totalinhash; i++)
{
if (hashs1[i].ContainsKey(filenamef))
{
sw.Write(hashs1[i][filenamef]);
}
if (hashs2[i].ContainsKey(filenameq))
{
sw2.Write(hashs2[i][filenameq]);
}
if (hashs3[i].ContainsKey(filenamefastaq))
{
swq.Write(hash4[i][filenamefastaq]);
}
if (hash4[i].ContainsKey(filenameqq))
{
sw2q.Write(hash4[i][filenameqq]);
}
}
sw.Close();
sw2.Close();
sw3.Close();
sw4.Close();
swq.Close();
sw2q.Close();
}
Auf einen Blick führen Sie doppelt so viele Hash-Lookups wie erforderlich. Verwenden Sie stattdessen 'Dictionary.TryGetValue'. Wenn das Ergebnis falsch ist, wissen Sie, dass es nicht existiert. Wenn es wahr zurückgibt, haben Sie bereits Ihren Wert. Als Kommentar hinterlassen, weil ich keine Zeit habe, das Problem auf einer höheren Ebene zu analysieren. Auch .... 'using' Blöcke sind dein Freund. Was passiert, wenn einer dieser Aufrufe von 'Write' eine Ausnahme auslöst? Sie werden nicht nach Ihren Streams so schnell aufräumen, wie Sie möchten. –
Dies ist möglicherweise eine bessere Frage für [code review] (http://codereview.stackexchange.com), da Sie nicht wirklich auf ein Problem stoßen. –
Was ist 'mswithfilenames'? – Tigran