使用内存映射文件的缺点我的网络服务每分钟写入数千个事务,我们将它们保存在高清上。我正在测试保存这些文件的不同方式,我用标准IO和MemoryMapped文件做了一些测试。在我的结果中,使用MemoryMapped文件写入文件(20k文本文件)比标准IO快4倍,而且我找不到任何缺点。由于我对这项技术没有那么多经验,您认为我在使用它们时可能会遇到任何问题,或者您认为没有任何缺点?谢谢!编辑1,这是来源:namespaceFileWritingTests.Writers{publicclassMappedFileWriter:ITestWriter{publicvoidWrite(stringcontent,stringpath,stringid){Byte[]data=System.Text.Encoding.UTF8.GetBytes(content);使用(varfileStream=newFileStream(path,FileMode.Create,FileAccess.ReadWrite,FileShare.None)),HandleInheritability.Inheritable,true)){varviewStream=memoryMapped.CreateViewStream();viewStream.Write(data,0,data.Length);}}}}这是测试器:publicTimeSpanRun(intiterations,Writers.ITestWritertester,Stringsubfolder){Console.WriteLine("--Startingtest{0}with{1}filewritings",subfolder,iterations.ToString());秒表stopWatch=newStopwatch();stopWatch.Reset();秒表开始();对于(在我=1;我<=迭代;i++){tester.Write(transaction,this.path+"\"+子文件夹+"\"+"file_"+i.ToString()+".txt",i.ToString());}stopWatch.Stop();TimeSpants=stopWatch.Elapsed;Console.WriteLine("--完成测试{0}与{1}文件写入。已用时间:{2}",subfolder,iterations.ToString(),ts.TotalMilliseconds);返回ts;多次调用测试器,有几种类型的测试器可以比较MMF的主要缺点是它们会消耗RAM,从而降低文件系统缓存的效率。这些小文件不是问题。另一个缺点(当然是有意为之)是您无法再衡量写入文件的成本。现在这是内核完成的工作,而不是您的程序。当然,它还在继续,天下没有免费的午餐。它与程序的其余部分同时执行,可以说是一个自由线程。密切关注任务管理器中“系统”进程的CPU使用率。同样,这么小的文件不太可能引起问题。这是一个被创建文件的成本吹走的微优化。在主轴磁盘驱动器上旋转20到50毫秒。不要忘记将其包含在您的测量中。文件数据以内存总线速度写入,最高可达5GB/秒,具体取决于机器的RAM类型。您删除的只是低级WriteFile()调用,这些调用现在由内核完成。您可以尝试使用FileStream进行测试,使用具有bufferSize值的构造函数。默认值为4096字节,将其增加到32K,以便只有一个WriteFile()调用。这样做的主要优点是您不必预先猜测MMF的大小。当你猜得太低时,它会变得非常丑陋。以上就是C#学习教程的全部内容:使用内存映射文件的缺点。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权请点击右侧联系管理员删除。如需转载请注明出处:
