Ant: [xslt] java.lang.ClassNotFoundException: org.apache.tools.ant.taskdefs.optional.TraXLiaison

У меня есть сборка Ant, которая отлично работает в Windows, но, кажется, отслаивается, когда я ее беру перешли на Linux. Проблема здесь:

[xslt] java.lang.ClassNotFoundException : org.apache.tools.ant.taskdefs.optional.TraXLiaison

Я уже пробовал следующее:

  1. Помещение xalan.jar , xercesImpl.jar и xml-apis.jar в каталоге $ ANT_HOME / lib .
  2. Помещение их в каталог путь к классам из файла сборки
  3. Установка дополнительных классов ant.

Я использую экземпляр Linux EC2 (базовый 64-разрядный AMI Amazon Linux 2011.02.1 Beta (идентификатор AMI: ami-8e1fece7) Amazon Linux AMI Base 2011.02 .1, загрузка EBS, 64-разрядная архитектура с Amazon EC2 AMI Tools.)

Разочаровывает то, что у меня ДЕЙСТВИТЕЛЬНО все работало, а затем, когда я все собрал и переместил на другую машину, ОБЕ машины перестали работать. : Foreach на нескольких потоках У меня есть 3 основных потока обработки, каждый из которых выполняет операции со значениями ConcurrentDictionaries с помощью Parallel.Foreach. Словари различаются по размеру от 1000 элементов до 250 000 ...

У меня есть 3 основных потока обработки, каждый из которых выполняет операции со значениями ConcurrentDictionaries с помощью Parallel.Foreach. Словари различаются по размеру от 1000 до 250 000 элементов

TaskFactory factory = new TaskFactory();
Task t1 = factory.StartNew(() =>
{
        Parallel.ForEach(dict1.Values, item => ProcessItem(item));
});

Task t2 = factory.StartNew(() =>
{                                
        Parallel.ForEach(dict2.Values, item => ProcessItem(item));
});

Task t3 = factory.StartNew(() =>
{                           
        Parallel.ForEach(dict3.Values, item => ProcessItem(item));
});
t1.Wait();
t2.Wait();
t3.Wait();

Я сравнил производительность (общее время выполнения) этой конструкции с простым запуском Parallel.Foreach в основном потоке, и производительность значительно улучшилась (время выполнения было уменьшено приблизительно 5 раз)

Мои вопросы:

  1. Что-то не так с Foreach на нескольких потоках У меня есть 3 основных потока обработки, каждый из которых выполняет операции со значениями ConcurrentDictionaries с помощью Parallel.Foreach. Словари различаются по размеру от 1000 элементов до 250 000 ...

    У меня есть 3 основных потока обработки, каждый из которых выполняет операции со значениями ConcurrentDictionaries с помощью Parallel.Foreach. Словари различаются по размеру от 1000 до 250 000 элементов

    TaskFactory factory = new TaskFactory();
    Task t1 = factory.StartNew(() =>
    {
            Parallel.ForEach(dict1.Values, item => ProcessItem(item));
    });
    
    Task t2 = factory.StartNew(() =>
    {                                
            Parallel.ForEach(dict2.Values, item => ProcessItem(item));
    });
    
    Task t3 = factory.StartNew(() =>
    {                           
            Parallel.ForEach(dict3.Values, item => ProcessItem(item));
    });
    t1.Wait();
    t2.Wait();
    t3.Wait();
    

    Я сравнил производительность (общее время выполнения) этой конструкции с простым запуском Parallel.Foreach в основном потоке, и производительность значительно улучшилась (время выполнения было уменьшено приблизительно 5 раз)

    Мои вопросы:

    1. Что-то не так с Для каждого. Словари различаются по размеру от 1000 элементов до 250 000 ...

      У меня есть 3 основных потока обработки, каждый из которых выполняет операции со значениями ConcurrentDictionaries с помощью Parallel.Foreach. Словари различаются по размеру от 1000 до 250 000 элементов

      TaskFactory factory = new TaskFactory();
      Task t1 = factory.StartNew(() =>
      {
              Parallel.ForEach(dict1.Values, item => ProcessItem(item));
      });
      
      Task t2 = factory.StartNew(() =>
      {                                
              Parallel.ForEach(dict2.Values, item => ProcessItem(item));
      });
      
      Task t3 = factory.StartNew(() =>
      {                           
              Parallel.ForEach(dict3.Values, item => ProcessItem(item));
      });
      t1.Wait();
      t2.Wait();
      t3.Wait();
      

      Я сравнил производительность (общее время выполнения) этой конструкции с простым запуском Parallel.Foreach в основном потоке, и производительность значительно улучшилась (время выполнения было уменьшено приблизительно 5 раз)

      Мои вопросы:

      1. Что-то не так с Для каждого. Словари различаются по размеру от 1000 элементов до 250 000 ...

        У меня есть 3 основных потока обработки, каждый из которых выполняет операции со значениями ConcurrentDictionaries с помощью Parallel.Foreach. Словари различаются по размеру от 1000 до 250 000 элементов

        TaskFactory factory = new TaskFactory();
        Task t1 = factory.StartNew(() =>
        {
                Parallel.ForEach(dict1.Values, item => ProcessItem(item));
        });
        
        Task t2 = factory.StartNew(() =>
        {                                
                Parallel.ForEach(dict2.Values, item => ProcessItem(item));
        });
        
        Task t3 = factory.StartNew(() =>
        {                           
                Parallel.ForEach(dict3.Values, item => ProcessItem(item));
        });
        t1.Wait();
        t2.Wait();
        t3.Wait();
        

        Я сравнил производительность (общее время выполнения) этой конструкции с простым запуском Parallel.Foreach в основном потоке, и производительность значительно улучшилась (время выполнения было уменьшено приблизительно 5 раз)

        Мои вопросы:

        1. Что-то не так с подход выше? Если да, то что и как можно ли его улучшить?
        2. В чем причина разного времени выполнения?
        3. Как лучше всего отладить / проанализировать такую ​​ситуацию?

        ИЗМЕНИТЬ : Для дальнейшего прояснения ситуации: Я издевательство над клиентскими вызовами службы WCF, каждый из которых работает в отдельном потоке (причина для задач). Я также пытался использовать ThreadPool.QueueUserWorkItem вместо Task, без повышения производительности. Объекты в словаре имеют от 20 до 200 свойств (только десятичные числа и строки), и здесь нет операций ввода-вывода

        Я решил проблему, поставив в очередь запросы обработки в BlockingCollection и обработав их по одному за раз

5
задан anchandra 24 March 2011 в 19:03
поделиться