Esempio n. 1
0
        public EnginesPool(int enginesCount, string developerSerialNumber, int waitingEngineTimeout)
        {
            projectId     = developerSerialNumber;
            engineHolders = new EngineHolder [enginesCount];
            for (var i = 0; i < enginesCount; i++)
            {
                engineHolders[i] = new EngineHolder(projectId);
            }

            engineHolderLock      = new object();
            waitingTimeout        = waitingEngineTimeout;
            semaphore             = new Semaphore(enginesCount, enginesCount);
            usageCountLock        = new object();
            autoRecycleUsageCount = 0; // Zero means that auto recycling will not be performed
        }
Esempio n. 2
0
        private void RecycleEngine(int engineIndex)
        {
            Log.Information("Recycling Abbyy engine with id {engineIndex}", engineIndex);

            try
            {
                engineHolders[engineIndex].Dispose();
            }
            catch (Exception ex)
            {
                Log.Error(ex, "While recycling Abbyy engine, received an error while disposing of engine.");
            }
            finally
            {
                engineHolders[engineIndex] = new EngineHolder(projectId);
            }
        }
        private void ReleaseEngine(int engineIndex, bool isRecycleRequired)
        {
            lock (engineHolderLock)
            {
                var isAutoRecycleRequired = AutoRecycleUsageCount != 0 &&
                                            AutoRecycleUsageCount <= engineHolders[engineIndex].GetEngineUsageCount();

                Log.Information("Releasing Abbyy engine with id {engineIndex}", engineIndex);
                engineHolders[engineIndex].UnlockEngine();
                if (isRecycleRequired || isAutoRecycleRequired)
                {
                    Log.Information("Recycling Abbyy engine with id {engineIndex}", engineIndex);
                    engineHolders[engineIndex].Dispose();
                    engineHolders[engineIndex] = new EngineHolder(projectId);
                }
            }
        }