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); }
public Classifier(ClassifierConfig config, IModel model) { #region [.check config.] config.ThrowIfNull("config"); config.UrlDetectorModel.ThrowIfNull("config.UrlDetectorConfig"); model.ThrowIfNull("model"); #endregion _Model = model; _Tokenizer = new ClassifyTokenizer(config.UrlDetectorModel); _ScalarProducts = new double[_Model.TotalClassCount]; _TextTFDictionary = new Dictionary <string, int>(TEXT_TF_DICTIONARY_CAPACITY); _ClassInfo = new ClassifyInfo[_Model.TotalClassCount]; for (int i = 0, len = _Model.TotalClassCount; i < len; i++) { _ClassInfo[i].ClassIndex = i; } }
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)); } }