2015-02-09 70 views
0

我想增加尝试打开ZIP文件的次数,而我最大的延迟是在IO中。我想使用MemoryMappedFile,我只能将性能提高20%。使用MemoryMappedFile使用dotnetzip C#编写压缩文件来增加Brute Force#

我的CPU使用率只有20%,因为我被困在IO中。

我第一次使用dotnetzip我用它像

zip1 = ZipFile.Read(filename); 

之后我决定使用MemoryMappedFile和我用它像

using (MemoryMappedFile memoryMapped = MemoryMappedFile.CreateFromFile(filename,  FileMode.Open)) 
{ 
    var viewStream = memoryMapped.CreateViewStream(); 
    zip1 = ZipFile.Read(viewStream); 
} 

予了20%,但我改进它认为它应该更多。有人有想法吗?我使用它不超过10MB的zip文件大小。

回答

0

你有一个单线程的代码。

要利用您的CPU,您需要打开尽可能多的线程,因为您的处理器可以一次处理多个线程,其中每个线程将与您的MemoryMappedFile配合使用。

你可以从这里Task Parallelism

+0

dotnetzip开始无法与多线程工作,如果我有一些文件并行工作,它的工作原理,但我设法达到速度的两倍与8个核心。与单核我做10000检查和使用13%的CPU和8核心我做20000检查和使用100%的CPU。有些东西对我来说没有意义。 – 2015-02-12 08:52:22

+0

与CPU处理相比,内存读取速度太慢,使用.Net时无法将文件加载到CPU内存。 8核可以忙于同步 - 在你的情况下垃圾工作量。如果你不想去那里,那么只需考虑尝试次数,而不是CPU工作负载。 – Rodion 2015-02-12 20:29:41