我想知道你们中是否有人知道为什么我的表现很糟糕;
我想要实现的目标; 生成220万个文件.要创建每个文件,平均需要2-5个数据库调用.
我正在处理的服务器有24个内核和190GB的RAM.
我将需要生成的文件分为24个批次.
乳清我使用下面的代码,我的表现很糟糕.生成过程需要一个多小时.
Parrallel.ForEach(batches, batch =>
{
using (var ctx = new MyContext())
{
for each(var file in batch.Files)
{
GenerateFile(file);
}
}
});
Run Code Online (Sandbox Code Playgroud)
但是,当我确保我的程序收到一个参数,以便progam知道要生成哪个批处理,所以我不需要使用并行功能.如果我使用以下.bat文件为每个批处理执行程序;
START CaMaakEiBericht.exe \B1
START CaMaakEiBericht.exe \B2
...
START CaMaakEiBericht.exe \B24
Run Code Online (Sandbox Code Playgroud)
它的运行速度惊人!总生成过程不到15分钟!此批处理文件还确保每个核心的CPU使用率约为90%.当我使用Parallel方法时,我只能获得30-40%的使用率.
有人对此有合理的解释吗?我对这个项目感到很满意,因为我终于有可能将.NET 4 Parallel库与EF结合使用,但不幸的是,它让我很失望:-)
我个人有点怀疑EF是这里的瓶颈......它是否在内部缓存一些东西,当多个进程获取数据时会强加一些锁?
开导我 :-)
parallel-processing performance frameworks entity entity-framework
在我的TFS 2017构建定义中,我试图将具有特定名称(Package)的文件夹复制到我的Artifacts目录.我只对特定文件夹本身感兴趣,而不是它的父文件夹.
有人可以告诉我如何使这项工作?
复制文件任务的当前配置:源:$(agent.builddirectory)内容:**\Package***目标文件夹:$(build.artifactstagingdirectory)\ MyArtifact
这导致以下文件夹结构,而我唯一感兴趣的是Package文件夹:\ MyArtifact\folderX\s\folderY\folderZ\folderA\Package