Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# c语言中的多线程#_C#_Asp.net_Multithreading_Hardware_Cpu - Fatal编程技术网

C# c语言中的多线程#

C# c语言中的多线程#,c#,asp.net,multithreading,hardware,cpu,C#,Asp.net,Multithreading,Hardware,Cpu,我不熟悉穿线。 我的老板给了我一个场景。我们有一个70gb的对象列表,我们想从数据库加载它。在这个场景中,我想利用cpu(多线程)需要时间。也就是说,对数据进行分区,加载第一部分,而不是第二部分,当加载第二部分时,意味着处理第一部分时,我应该做什么请指导我。我的经验是,数据检索总是需要更长的时间,而多线程只在CPU密集型任务中起作用 例如,我使用FOR XML一次从数据库检索5000个帐户及其所有相关人员信息,以便获得可以反序列化的关系数据。这大约需要一分钟,然后我运行复杂的分段,它在不到一秒钟

我不熟悉穿线。
我的老板给了我一个场景。我们有一个70gb的对象列表,我们想从数据库加载它。在这个场景中,我想利用cpu(多线程)需要时间。也就是说,对数据进行分区,加载第一部分,而不是第二部分,当加载第二部分时,意味着处理第一部分时,我应该做什么请指导我。

我的经验是,数据检索总是需要更长的时间,而多线程只在CPU密集型任务中起作用

例如,我使用FOR XML一次从数据库检索5000个帐户及其所有相关人员信息,以便获得可以反序列化的关系数据。这大约需要一分钟,然后我运行复杂的分段,它在不到一秒钟的时间内运行。在这种情况下,多线程将不会有什么不同

我的另一个场景是,我进行了数千次简单的DB调用,每次调用都会受到网络延迟的影响,而SQL server由于表很小且索引完整,所以搜索是即时的。在本例中,使用这些线程一次生成几个线程并多次调用数据库实际上更快。产卵8线程提供了大约四倍的增长


查看
System.Threading
命名空间。

您是否可以控制如何将数据加载到数据库中,以及硬件的外观

要加载70GB的数据,首先需要进行I/O绑定。如果数据存在于单个卷中,尝试使用多个线程只会导致磁头在驱动器上来回搜索时发生抖动

这意味着您的第一步应该是最大限度地提高磁盘子系统的性能。您可以通过以下方式实现:

  • 将磁盘分区大小限制在驱动器的前三分之一
  • 将尽可能多的磁盘轴放入单个大型RAID卷中,速度不超过磁盘控制器的速度
  • 使用固态硬盘代替旋转磁驱动器
  • 使用高速磁盘控制器
  • 使用多个磁盘控制器
  • 在多个控制器之间分散驱动器
  • 完成这一部分后,下一步是在尽可能多的磁盘和控制器之间对数据进行分区,同时仍允许日志文件本身位于卷上。如果您可以用快速RAID卷填充整个两个控制器,那么可以在其中分割数据。在某些情况下,可以使用SQL Server的表分区机制来帮助处理,并强制表的某些部分位于某些物理卷上

    分区完成后,您可以构建应用程序,让每个物理上独立的分区读取一个线程,以避免磁盘抖动

    一旦你不再受I/O的限制,那么你就可以开始考虑优化CPU方面的方法了——但达到这一点是非常不寻常的

    根据你需要的速度,这类事情可能很快变得复杂(而且昂贵)


    如果有帮助,我会在我的书中详细讨论这些基础设施问题:。

    现在的情况是,假设数据库中每10 mb有1 TB的对象。我有一个名为MATCH()的函数,它有一个查询对象,其返回类型是double,在这个函数中,我有数学计算。现在我检查结果的天气值是否介于0和1之间,然后我有double[]结果=新的double[eg 1000]。我该怎么做,因为系统有2 gb ram,我应该锁定哪个部分,或者使用互斥锁,或者使用线程池。请给我程序的体系结构。请告诉我可以同时运行多少个线程?backgroundworker controlol可以使用多少线程听起来您面临两个挑战:第一,快速读取数据库中的数据,第二,使用匹配函数处理数据。我没有足够的信息来详细回答你的问题;这是一个论坛帖子的大要求。简而言之,您将有一个或多个线程读取数据(取决于物理布局),一个或多个线程处理结果,并使用锁或信号灯来协调工作。祝你好运