我正面临一个问题,我已经花了很多时间,但现在我无法解决这个问题。
首先是手头项目的大致轮廓:我收到大约170k个复杂XML文件,大小不一(从5 KB到10 MB),必须加载到SQL Server DB中。由于它们可能在结构上略有不同(并非所有值/节点都是必需的),因此我有一个XSLT文件,可以帮助实现扁平化"他们和这只是加载他们的过程。由于存在大量文件(和数据),我们选择使用相当比例的服务器:24个物理内核,虚拟化为48个内核,以及约512 GB RAM。
问题本身:由于SSIS中的XML Source被证明对此任务非常不满意,我决定创建一个C#源组件,它负责XML文件的加载和XSLT转换。但是,为了缩小性能问题,我首先创建了一个控制台应用程序,以便设计和调试我的方法。为了加快描述的加载过程,我计划在我的源组件中使用多线程:想法是并行加载和转换大量XML文件(因为我将XSLT加载为编译转换)。因此,基本上我计划在SSIS中获得的是一个组件,可以并行加载50或100个文件,然后将数据发送到(当前)10个输出(10个表)。
有趣的是:无论我使用什么结构(Parallel.For,任务工厂,线程队列),我的C#代码永远不会创建超过24个线程(物理核心数)。
据我所知:据我所知,任务需要一个核心,而一个核心可以有多个线程......
那么,我做错了什么?我对多线程的一般理解是错误的吗?