这段代码如何优化,提高速度

sdfgrtyu 2017-05-11 09:47:26
  await Task.Factory.StartNew(() =>
{


foreach (string c in list1)
{
WriteTextAsync(c, ".\\转换文件\\" + data + ".txt");
}
foreach (string c in list2)
{
WriteTextAsync(c, ".\\转换文件\\" + data + ".txt");
}
foreach (string c in list3)
{
WriteTextAsync(c, ".\\转换文件\\" + data + ".txt");
}
}, TaskCreationOptions.LongRunning);


public void WriteTextAsync(string text, string path)
{
using (StreamWriter outputFile = new StreamWriter(path, true))
{
outputFile.WriteLineAsync(text);
}
}
...全文
666 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
sdfgrtyu 2017-05-11
  • 打赏
  • 举报
回复
引用 2 楼 From_TaiWan 的回复:
你的时间主要花到了文件的打开和关闭,可以先将list的内容读取到一个string变量,然后一次性写入文件
具体怎么写
秋的红果实 2017-05-11
  • 打赏
  • 举报
回复
你的时间主要花到了文件的打开和关闭,可以先将list的内容读取到一个string变量,然后一次性写入文件
by_封爱 版主 2017-05-11
  • 打赏
  • 举报
回复
换至强的E5 2699V3*2的CPU. 1T的DDR12内存 可以加速读写速度.
sdfgrtyu 2017-05-11
  • 打赏
  • 举报
回复
拜一刀 2017-05-11
  • 打赏
  • 举报
回复
引用 1 楼 diaodiaop 的回复:
换至强的E5 2699V3*2的CPU. 1T的DDR12内存 可以加速读写速度.
换固态硬盘啊
by_封爱 版主 2017-05-11
  • 打赏
  • 举报
回复
引用 16 楼 diaodiaop 的回复:

 List<string> a = new List<string>() { "1"};
 List<string> b = new List<string>() { "2"};
 List<string> c = new List<string>() { "3" };

var d = a.Union(b).Union(c).ToArray();
System.IO.File.WriteAllLines(""../../ddd.txt"", d);
一个文件 不就是打开 写入吗? 2句话就搞定的事 写那么多..我以为是多么高端的功能呢...
写错方法了 不是Union......
引用 18 楼 crystal_lz 的回复:
从他的代码来看.. 好像是data变量吧 然而data变量好像没有变过吧
是的 我看岔纰了.... 因为他各种循环我以为前面那个是路径呢....
crystal_lz 2017-05-11
  • 打赏
  • 举报
回复
引用 9 楼 diaodiaop 的回复:
[quote=引用 7 楼 crystal_lz 的回复:] 没调用一次WriteTextAsync 里面就 重新打开一次文件 好像很6的样子
从他的代码来看.. 好像是多个txt吧.. 5个txt 难道不打开5次???? 一次可以??[/quote] 从他的代码来看.. 好像是data变量吧 然而data变量好像没有变过吧
by_封爱 版主 2017-05-11
  • 打赏
  • 举报
回复
所以本来很简单的问题.到你手里 就弄成这样了...
by_封爱 版主 2017-05-11
  • 打赏
  • 举报
回复
其实 lz你应该说出你的需求..先别上代码. 因为可能你上代码跟你的描述不一样..或者让别人理解错误. 比如你这个问题.我认为你是一组相同的数据写到不同的txt里 后来我发现我看错了.... 所以 你是要把list1 list2 list3 都按照顺序写到一个文本里面吗? 那直接

 List<string> a = new List<string>() { "1"};
 List<string> b = new List<string>() { "2"};
 List<string> c = new List<string>() { "3" };

var d = a.Union(b).Union(c).ToArray();
System.IO.File.WriteAllLines(""../../ddd.txt"", d);
一个文件 不就是打开 写入吗? 2句话就搞定的事 写那么多..我以为是多么高端的功能呢...
xuzuning 2017-05-11
  • 打赏
  • 举报
回复
WriteLineAsync 是异步的,能保证次序吗? 我有疑惑,但看你就这么用,就不好说什么了
xuzuning 2017-05-11
  • 打赏
  • 举报
回复
是呀
sdfgrtyu 2017-05-11
  • 打赏
  • 举报
回复
引用 11 楼 xuzuning 的回复:
            using (StreamWriter outputFile = new StreamWriter(".\\转换文件\\" + data + ".txt", true))
            {
                list1.ForEach(x => outputFile.WriteLineAsync(x));
                list2.ForEach(x => outputFile.WriteLineAsync(x));
                list3.ForEach(x => outputFile.WriteLineAsync(x));
            }
引用 11 楼 xuzuning 的回复:
            using (StreamWriter outputFile = new StreamWriter(".\\转换文件\\" + data + ".txt", true))
            {
                list1.ForEach(x => outputFile.WriteLineAsync(x));
                list2.ForEach(x => outputFile.WriteLineAsync(x));
                list3.ForEach(x => outputFile.WriteLineAsync(x));
            }
请问list1.ForEach是按照顺序写入的吗?
sdfgrtyu 2017-05-11
  • 打赏
  • 举报
回复
引用 11 楼 xuzuning 的回复:
            using (StreamWriter outputFile = new StreamWriter(".\\转换文件\\" + data + ".txt", true))
            {
                list1.ForEach(x => outputFile.WriteLineAsync(x));
                list2.ForEach(x => outputFile.WriteLineAsync(x));
                list3.ForEach(x => outputFile.WriteLineAsync(x));
            }
不行啊,
xuzuning 2017-05-11
  • 打赏
  • 举报
回复
            using (StreamWriter outputFile = new StreamWriter(".\\转换文件\\" + data + ".txt", true))
            {
                list1.ForEach(x => outputFile.WriteLineAsync(x));
                list2.ForEach(x => outputFile.WriteLineAsync(x));
                list3.ForEach(x => outputFile.WriteLineAsync(x));
            }
sdfgrtyu 2017-05-11
  • 打赏
  • 举报
回复
引用 6 楼 wanghui0380 的回复:
重构成 FileStream.Write(线程安全队列) //对fileStream写wirte的扩展方法,传入对象为线程安全队列 这样你可以解耦了,filestream只需打开一次,方法内部移除队列并apent到file,同时因为是线程安全队列,你外部也可以随时把新数据添加到队列里面
FileStream.wirte是写入字节
by_封爱 版主 2017-05-11
  • 打赏
  • 举报
回复
引用 7 楼 crystal_lz 的回复:
没调用一次WriteTextAsync 里面就 重新打开一次文件 好像很6的样子
从他的代码来看.. 好像是多个txt吧.. 5个txt 难道不打开5次???? 一次可以??
sdfgrtyu 2017-05-11
  • 打赏
  • 举报
回复
引用 6 楼 wanghui0380 的回复:
重构成 FileStream.Write(线程安全队列) //对fileStream写wirte的扩展方法,传入对象为线程安全队列 这样你可以解耦了,filestream只需打开一次,方法内部移除队列并apent到file,同时因为是线程安全队列,你外部也可以随时把新数据添加到队列里面
具体来说,怎么写代码?
crystal_lz 2017-05-11
  • 打赏
  • 举报
回复
没调用一次WriteTextAsync 里面就 重新打开一次文件 好像很6的样子
wanghui0380 2017-05-11
  • 打赏
  • 举报
回复
重构成 FileStream.Write(线程安全队列) //对fileStream写wirte的扩展方法,传入对象为线程安全队列 这样你可以解耦了,filestream只需打开一次,方法内部移除队列并apent到file,同时因为是线程安全队列,你外部也可以随时把新数据添加到队列里面
by_封爱 版主 2017-05-11
  • 打赏
  • 举报
回复
引用 2 楼 From_TaiWan 的回复:
你的时间主要花到了文件的打开和关闭,可以先将list的内容读取到一个string变量,然后一次性写入文件
人家要打开N个txt并且写入一些数据. 你一次性 怎么打开N个文件??
加载更多回复(1)

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧