के साथ मेमोरी लीक (?) मेरे पास 500MB++
आकार में से कुछ बहुत बड़ी फ़ाइलें हैं, जिसमें पूर्णांक मान हैं (वास्तव में यह थोड़ा अधिक जटिल है), मैं उन फ़ाइलों को एक लूप में पढ़ रहा हूं और अधिकतम मान की गणना कर रहा हूं सारे दस्तावेज। किसी कारण से प्रसंस्करण के दौरान स्मृति लगातार बढ़ रही है, ऐसा लगता है कि जीसी कभी भी स्मृति को रिलीज़ नहीं करता है, जो lines
के पिछले उदाहरणों द्वारा अधिग्रहित किया गया है।StreamReader
मैं डेटा स्ट्रीम नहीं कर सकता और प्रत्येक फ़ाइल के लिए GetFileLines
का उपयोग करना होगा। lines
को एक फ़ाइल के लिए lines
स्टोर करने के लिए आवश्यक स्मृति की वास्तविक मात्रा प्रदान की गई है, मुझे 5GB
RAM
क्यों 10 फ़ाइलों को संसाधित करने के बाद उपयोग किया जाता है? आखिरकार यह 15 फाइलों के बाद मेमोरी अपवाद के साथ दुर्घटनाग्रस्त हो गया।
गणना:
int max = int.MinValue;
for (int i = 0; i < 10; i++)
{
IEnumerable<string> lines = Db.GetFileLines(i);
max = Math.Max(max, lines.Max(t=>int.Parse(t)));
}
GetFileLines कोड:
public static List<string> GetFileLines(int i)
{
string path = GetPath(i);
//
List<string> lines = new List<string>();
string line;
using (StreamReader reader = File.OpenText(path))
{
while ((line = reader.ReadLine()) != null)
{
lines.Add(line);
}
reader.Close();
reader.Dispose(); // should I bother?
}
return lines;
}
क्या आप 'लाइनों को कॉल करते हैं। क्लीयर()' विधि? – opewix
मुझे नहीं करना चाहिए? – user1514042
10 x 500 एमबी = 5 जीबी। आप सभी फाइलों की सूची सूची में रखते हैं * सूची लाइन *। ReadAllLines के रूप में वही perf() –
Cybermaxs