Что 'useLegacyV2RuntimeActivationPolicy' делает в.NET 4 конфигурации?

Интерфейс ExecutorService не определяет метод для исследования количества рабочих потоков в пуле, поскольку это - деталь реализации

public int getPoolSize()
Returns the current number of threads in the pool.

, доступно на классе

import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;


public class PoolSize {

    public static void main(String[] args) {
        ThreadPoolExecutor executor = new ThreadPoolExecutor(10, 20, 60L, TimeUnit.SECONDS, new LinkedBlockingQueue());
        System.out.println(executor.getPoolSize());
    }
}

ThreadPoolExecutor, Но это требует, чтобы Вы явно создали ThreadPoolExecutor, вместо того, чтобы использовали фабрику Исполнителей, которая возвращает объекты ExecutorService. Вы могли всегда создавать свою собственную фабрику, которая возвратила ThreadPoolExecutors, но Вас все еще оставят с невоспитанностью использования конкретного типа, не его интерфейса.

Одна возможность состояла бы в том, чтобы обеспечить Ваш собственный ThreadFactory, который создает потоки в известной группе потока, которая Вы можете тогда количество

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadFactory;


public class PoolSize2 {

    public static void main(String[] args) {
        final ThreadGroup threadGroup = new ThreadGroup("workers");

        ExecutorService executor = Executors.newCachedThreadPool(new ThreadFactory() {
            public Thread newThread(Runnable r) {
                return new Thread(threadGroup, r);
            }
        });

        System.out.println(threadGroup.activeCount());
    }
}
209
задан Cameron MacFarland 17 November 2009 в 13:17
поделиться

2 ответа

After a bit of time (and more searching), I found this blog entry by Jomo Fisher.

One of the recent problems we’ve seen is that, because of the support for side-by-side runtimes, .NET 4.0 has changed the way that it binds to older mixed-mode assemblies. These assemblies are, for example, those that are compiled from C++\CLI. Currently available DirectX assemblies are mixed mode. If you see a message like this then you know you have run into the issue:

Mixed mode assembly is built against version 'v1.1.4322' of the runtime and cannot be loaded in the 4.0 runtime without additional configuration information.

[Snip]

Хорошая новость для приложений состоит в том, что у вас есть возможность вернуться к привязке эпохи .NET 2.0 для этих сборок, установив флаг app.config следующим образом:

 
 

Похоже, способ загрузки сборок в смешанном режиме в среде выполнения изменился. Я не могу найти никаких подробностей об этом изменении или о том, почему это было сделано. Но атрибут useLegacyV2RuntimeActivationPolicy возвращается к загрузке среды CLR 2.0.

164
ответ дан 23 November 2019 в 04:39
поделиться

Вот объяснение, которое я недавно написал, чтобы помочь с отсутствием информации об этом атрибуте. http: //www.marklio .com / marklio / PermaLink, guid, ecc34c3c-be44-4422-86b7-900900e451f9.aspx (ссылка на Internet Archive Wayback Machine)

Процитируем наиболее важные фрагменты:

{{ 1}}

[Установка .NET] v4 «не оказывает влияния». Он не должен изменять поведение существующих компонентов при установке.

Атрибут useLegacyV2RuntimeActivationPolicy в основном позволяет вам сказать: «У меня есть некоторые зависимости от устаревших API-интерфейсов совместимости. Пожалуйста, заставьте их работать так, как они привыкли, в отношении выбранной среды выполнения »

. Почему бы нам не сделать это поведением по умолчанию? Вы можете возразить, что такое поведение более совместимо и значительно упрощает перенос кода из предыдущих версий. Если вы помните, это не может быть поведением по умолчанию, потому что это сделает установку версии 4 эффективной, что может нарушить работу существующих приложений, установленных на вашем компьютере.

Полный текст объясняет это более подробно. В RTM документация MSDN по этому поводу должна быть лучше.

125
ответ дан 23 November 2019 в 04:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: