我有一个应用程序,导出数据为xml文件使用xsd方案。
它创建了很多小文件。29 or,其中文件的平均大小为0.3MB或10KB。它创建了大约140000个文件。它使用
Enumerable.Range(1, gs.Count)
.AsParallel()
.ForAll将独立数据保存到文件
使用MS profiler I将执行时间减少到30分钟。它的峰值写入速率高达20Mb/s。
因此,top profiler的最终版本的结果包括:
System.IO.File.Open(string,valuetype System.IO.FileMode) 30,14 % System.IDisposable.Dispose() 22,09% System.Xml.Serialization.XmlSerializer.Serialize(class System.IO.Stream,object) 13,42 %
代码是:
using (Stream streamw = File.Open(fileName, FileMode.Create))
{
formatter.Serialize(streamw, this);
}其中格式化程序是:
static XmlSerializer formatter = new XmlSerializer(typeof(XItemDesc));所以问题是:
1)分析器的结果是否意味着我已经达到了HDD性能的最大值?
2)行为的目的是在第二行进行处理吗?
发布于 2013-01-22 16:27:49
好吧,也许性能瓶颈是由并行造成的。请记住,对HDD的请求不是并行的,它们是排队的。
如果您的文件位于不同的位置、不同的网络共享或不同的物理硬盘上,您可以从并行中获得性能提升。
另外,如果您使用的是.NET 2.0,并且我看到您使用的是using()语法糖,那么您仍然应该调用Dispose()并取消对流的引用,因为使用()是错误的。
如果文件所在的分区是NTFS,那么请考虑NTFS对于小文件的性能缺陷。NTFS performance and large volumes of files and directories
https://stackoverflow.com/questions/14453193
复制相似问题