我以前从未在c#中尝试过并行编程。
因此,在我深入研究之前,我希望能够快速了解它是否值得投入时间和精力。
我有一个使用.NET 4.0的C# WCF Web服务应用程序。(如果并行编程有效,可以升级到4.5)
所有服务都是REST服务。 特别是其中一个服务需要很长时间才能完成。 该服务正在处理和修改XML文档。 该服务接受XML字符串作为输入,并返回修改后的XML文件。
该服务在不同的位置和不同的元素中处理XML。 因此,我创建了继承自名为IDocumentProcessor的接口的类,并拥有这些类的列表。
代码简要如下:
所有服务都是REST服务。 特别是其中一个服务需要很长时间才能完成。 该服务正在处理和修改XML文档。 该服务接受XML字符串作为输入,并返回修改后的XML文件。
该服务在不同的位置和不同的元素中处理XML。 因此,我创建了继承自名为IDocumentProcessor的接口的类,并拥有这些类的列表。
代码简要如下:
interface IDocumentProcessor {
void Process(XDocument doc);
}
public class DateProcessor : IDocumentProcessor
{
public void Process(XDocument doc) {....};
}
public class CountryProcessor : IDocumentProcessor
{
public void Process(XDocument doc) {....};
}
public class AddressProcessor : IDocumentProcessor
{
public void Process(XDocument doc) {....};
}
public class AuthorProcessor : IDocumentProcessor
{
public void Process(XDocument doc) {....};
}
....
Public class DocumentProcessorService
{
public class ProcessDocument(string xmlFileAsString)
{
var processorList = new List<IDocumentProcessor>{
new DateProcessor();
new CountryProcessor();
new AddressProcessor();
new AuthorProcessor();
}
var xDocument = XDocument.Parse(xmlFileAsString);
processorList.forEach(x => x.Process(xDocument));
}
}
我的快速问题是,在我深入研究并行计算之前: 并行计算能够修改同一xDocument对象吗(在不同的位置)?
这段代码可以转换为使用.NET 4.0进行并行计算吗?
DocumentProcessorService
类的实例了,对吧?你的CPU核心数量是有限的。如果你运行16个线程,而你的CPU只有8个核心,那么每2个线程将共享一个核心。这意味着当其中一个线程正在运行时,另一个线程必须等待。 - Yacoub Massad