示例#1
0
            public static ConcurrentFactory GetConcurrentFactory()
            {
                var f = _ConcurrentFactory;

                if (f == null)
                {
                    lock (_SyncLock)
                    {
                        f = _ConcurrentFactory;
                        if (f == null)
                        {
                            {
                                var modelConfig = new ModelConfig()
                                {
                                    Filenames   = Config.MODEL_FILENAMES,
                                    RowCapacity = Config.MODEL_ROW_CAPACITY,
                                    NGramsType  = Config.MODEL_NGRAMS_TYPE
                                };
                                var model  = new ModelNative(modelConfig);                                //new ModelHalfNative( modelConfig ); //new ModelClassic( modelConfig );
                                var config = new ClassifierConfig(Config.URL_DETECTOR_RESOURCES_XML_FILENAME);

                                f = new ConcurrentFactory(config, model, Config.CONCURRENT_FACTORY_INSTANCE_COUNT);
                                _ConcurrentFactory = f;
                            }
                            {
                                GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced);
                                GC.WaitForPendingFinalizers();
                                GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced);
                            }
                        }
                    }
                }
                return(f);
            }
示例#2
0
        public ConcurrentFactory(ClassifierConfig config, IModel model, int instanceCount)
        {
            if (instanceCount <= 0)
            {
                throw (new ArgumentException("instanceCount"));
            }
            if (config == null)
            {
                throw (new ArgumentNullException("config"));
            }
            if (model == null)
            {
                throw (new ArgumentNullException("model"));
            }

            _Semaphore = new Semaphore(instanceCount, instanceCount);
            _Stack     = new ConcurrentStack <Classifier>();
            for (int i = 0; i < instanceCount; i++)
            {
                _Stack.Push(new Classifier(config, model));
            }
        }