Я никогда раньше не пробовал параллельное программирование на С#. Итак, прежде чем я вскочил, я хотел бы получить быстрый ответ, чтобы узнать, стоит ли углубляться в это или нет. У меня есть приложения веб-служб С# WCF с .NET 4.0. (возможен апгрейд до 4.5, если работает параллельное программирование)
Все службы являются службами 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?
ProcessDocument
. Сколько раз вы вызываете этот метод (для разных файлов) в секунду или минуту? Может быть, вместо того, чтобы заставить этот метод работать быстрее, вы можете запускать его несколько экземпляров в разных документах? - person Yacoub Massad   schedule 25.09.2015DocumentProcessorService
в разных потоках, верно? У вас есть ограниченное количество ядер процессора. Если вы используете 16 потоков, а ваш процессор имеет только 8 ядер, то каждые 2 потока будут совместно использовать одно ядро. Это означает, что пока один из этих двух потоков работает, другой должен ждать. - person Yacoub Massad   schedule 25.09.2015