你可以做一个非常简单的测试。例如,我创建了一个小型测试应用程序,它向本地驱动器和网络驱动器写入和读取 1000 个文件,每个文件 1000 字节。
代码如下:
private void btnStart_Click(object sender, EventArgs e)
{
int count, size;
count = Int32.Parse(tbCount.Text);
size = Int32.Parse(tbSize.Text);
string path = tbPath.Text;
string stringToWrite = new string('A', size);
System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
sw.Start();
for(int i=0;i<count;i++)
{
string fileName = System.IO.Path.Combine(path, i.ToString() + ".tst");
System.IO.File.AppendAllText(fileName, stringToWrite);
}
sw.Stop();
tbLog.Text += String.Format("{0} files with length {1} saved to {2} in {3}ms"+Environment.NewLine, count, size, path, sw.ElapsedMilliseconds);
}
private void btnRead_Click(object sender, EventArgs e)
{
int count;
count = Int32.Parse(tbCount.Text);
string path = tbPath.Text;
System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
sw.Start();
for (int i = 0; i < count; i++)
{
string fileName = System.IO.Path.Combine(path, i.ToString() + ".tst");
string temp = System.IO.File.ReadAllText(fileName);
}
sw.Stop();
tbLog.Text += String.Format("{0} files loaded from {1} in {2}ms" + Environment.NewLine, count, path, sw.ElapsedMilliseconds);
}
(第一个函数写入文件,第二个函数读取文件;大小、计数和路径由 UI 定义)。
结果如下:
写入 1000 个文件,每个文件 1000 个字节:
本地驱动器:800ms
网络驱动器:9000ms
读取 1000 个文件,每个文件 1000 个字节:
本地驱动器:500ms
网络驱动器:5000ms
所以你看到有人应该为远程访问付费——作者或读者。您还看到写入远程位置的时间是从远程位置读取的两倍。
我认为应该根据您的应用程序和服务器功能的逻辑做出决定 - 哪个服务器更忙,哪个服务器应该快速处理信息?例如,如果第一台服务器以非常高的速度获取数据并且应该将所有数据快速实时保存到文件中,而第二台服务器可能会排队处理文件并花时间而不急于 - 那么文件应该是本地保存在第一台服务器上。如果第一台服务器只是写入文件并且它的处理器/IO 不是太忙,但第二台服务器通过处理文件加载到最大 - 让第一台服务器将文件传送到第二台服务器的本地驱动器。
还要考虑可扩展性 - 如果将来您需要 5 台“服务器 1”类型的服务器为单个服务器 2 写入文件怎么办?或者,5 台“服务器 2”类型的服务器同时处理单个服务器 1 写入的文件?还是许多服务器同时写入和读取文件?如果这些选项相关,可能是数据库或某些队列解决方案会更好。
但是,如果您不关心所有这些事情并且只希望获得更好的整体性能 - 那么,再次在本地写入文件并从远程位置读取会更快。