在我的计划,我需要写大量的文本文件(〜300 MB),文本文件包含由空格分隔的数字,我使用这个代码:增强性能
TextWriter guessesWriter = TextWriter.Synchronized(new StreamWriter("guesses.txt"));
private void QueueStart()
{
while (true)
{
if (writeQueue.Count > 0)
{
guessesWriter.WriteLine(writeQueue[0]);
writeQueue.Remove(writeQueue[0]);
}
}
}
private static void Check()
{
TextReader tr = new StreamReader("data.txt");
string guess = tr.ReadLine();
b = 0;
List<Thread> threads = new List<Thread>();
while (guess != null) // Reading each row and analyze it
{
string[] guessNumbers = guess.Split(' ');
List<int> numbers = new List<int>();
foreach (string s in guessNumbers) // Converting each guess to a list of numbers
numbers.Add(int.Parse(s));
threads.Add(new Thread(GuessCheck));
threads[b].Start(numbers);
b++;
guess = tr.ReadLine();
}
}
private static void GuessCheck(object listNums)
{
List<int> numbers = (List<int>) listNums;
if (!CloseNumbersCheck(numbers))
{
writeQueue.Add(numbers[0] + " " + numbers[1] + " " + numbers[2] + " " + numbers[3] + " " + numbers[4] + " " + numbers[5] + " " + numbers[6]);
}
}
private static bool CloseNumbersCheck(List<int> numbers)
{
int divideResult = numbers[0]/10;
for (int i = 1; i < 6; i++)
{
if (numbers[i]/10 != divideResult)
return false;
}
return true;
}
文件data.txt中包含的数据格式为:(点意味着遵循同样的逻辑更多的数字)
1 2 3 4 5 6 1
1 2 3 4 5 6 2
1 2 3 4 5 6 3
.
.
.
1 2 3 4 5 6 8
1 2 3 4 5 7 1
.
.
.
我知道这是不是很有效,我一直在寻找如何使人们更快一些建议。 如果你知道如何节省大量的数字比.txt更有效,我将不胜感激。
什么样的对象是writeQueue? – 2011-04-19 15:44:06
TextWriter.Synchronized()似乎无用,因为您只能从一个线程(QueueStart())访问文件。但是你的队列或者列表“writeQueue”应该是同步的,如果不是的话。 – Kipotlov 2011-04-19 15:48:01
writeQueue是一个列表,我增加了缓冲区大小为64K(感谢Gabe),我把它全部变成了1个线程(谢谢Jeffery),它确实做得更快。该程序sopused做削减关于彩票号码,而不是pin码... –
ofirl
2011-04-19 16:47:55