这段代码:
object obj = new object { };
Stopwatch watch = new Stopwatch();
watch.Start();
for (int i = 0; i < 90000; i++)
{
new Thread(() =>
{
lock (obj)
{
string file = new JavaScriptSerializer().Serialize(saeed);
File.AppendAllText(string.Format(@"c:\Temp\{0}.txt", i), file);
}
}).Start();
}
watch.Stop();
运行大约 15 分钟,而这段代码:
Stopwatch watch = new Stopwatch();
watch.Start();
for (int i = 0; i < 90000; i++)
{
{
string file = new JavaScriptSerializer().Serialize(saeed);
File.AppendAllText(string.Format(@"c:\Temp\{0}.txt", i), file);
}
}
watch.Stop();
运行时间为 45 秒。为什么第一个应用程序在线程化时要慢得多?使用线程不是提高应用程序性能的一种技术吗?
更新:即使使用闭包概念并引用中间变量而不是i
在我的线程中而不是使用锁,这使得线程真正异步,创建这些文件仍然需要超过 5 分钟。
Stopwatch watch = new Stopwatch();
watch.Start();
for (int i = 0; i < 90000; i++)
{
var x = i;
new Thread(() =>
{
string file = new JavaScriptSerializer().Serialize(saeed);
File.AppendAllText(string.Format(@"c:\Temp\{0}.txt", i), file);
}).Start();
}
watch.Stop();