C# 在.net 4.5中,并发I/O操作的最大数量是多少?

C# 在.net 4.5中,并发I/O操作的最大数量是多少?,c#,multithreading,io,C#,Multithreading,Io,在使用静态void的多线程场景中,我可以同时写入的最大文件数是多少,即: public static void WriteToXmlFile<T>(string filePath, T objectToWrite, bool append = false) where T : new() { TextWriter writer = null; try { var serializer = new XmlSerializer(typeof(T))

在使用静态void的多线程场景中,我可以同时写入的最大文件数是多少,即:

public static void WriteToXmlFile<T>(string filePath, T objectToWrite, bool append = false) where T : new()
{
    TextWriter writer = null;
    try
    {
        var serializer = new XmlSerializer(typeof(T));
        writer = new StreamWriter(filePath, append);
        serializer.Serialize(writer, objectToWrite);
    }
    finally
    {
        if (writer != null)
            writer.Close();
    }
}
public static void WriteToXmlFile(字符串文件路径,T objectToWrite,bool append=false),其中T:new()
{
TextWriter=null;
尝试
{
var serializer=newxmlserializer(typeof(T));
writer=newstreamwriter(文件路径,追加);
serializer.Serialize(writer,objectToWrite);
}
最后
{
if(writer!=null)
writer.Close();
}
}

将从同时运行的多个任务访问此静态空白。我可以同时写入的文件数量是否有默认限制,或者我可以以何种方式修改任何此类属性?

这里的瓶颈是硬件,而不是软件。磁盘驱动器上的磁头在任何时间只能位于一个位置。如果有多个线程告诉它同时做一些事情,那么它的工作速度不会更快(而且重复寻找新的块可能会更慢)

有帮助的并行化程度将等于您拥有的物理驱动器的数量。如果您有4个磁盘驱动器,您可以从一次写入4个文件中获益


当然值得注意的是,这里不需要多个线程,无论您是否希望执行并行写入。如果您实际上有多个物理磁盘驱动器,则可以使用异步而不是多线程来实现并行性。

为什么您认为有任何限制?至少,您可以一次写入的文件量非常容易测试。我想,这个限制应该来自操作系统,而不是。我认为这个限制只能由硬件环境施加。NET中没有固定的限制。只有负载测试才能发现瓶颈。在app.config中,同时进行网络连接有一个限制。(默认值为2)我在想,对于io活动是否有类似的选项……例如:在app.config中,对同时进行的网络连接有一个限制。如果你没有;t指定它,默认值为2。我只是想知道io活动中也有同样的事情…@Olsi没有人为的节流,没有,不过,如果你没有多个物理磁盘驱动器,你可能希望有。这些限制最终是由操作系统强加的(就开放资源而言)。也就是说,如果他们被击中。。嗯,这通常是一个错误,比如不正确地处理文件。@user2864740我强烈怀疑操作系统支持的并发文件流比物理磁盘驱动器支持的并发文件流要多得多。我可以想象,要超过操作系统所能处理的容量,需要数千个甚至更多的物理驱动器。没有一台机器会有这么多的驱动器插槽。@请注意,很容易耗尽windows文件资源,这方面还有很多问题。限制(存在)与不良性能(可能存在也可能不存在)是分开的。