public int InsertPrograms(List<Program> aProgramList, DeleteBeforeImportOption progamsToDelete,
ThreadPriority aThreadPriority)
{
try
{
int sleepTime = 10;
switch (aThreadPriority)
{
case ThreadPriority.Highest:
case ThreadPriority.AboveNormal:
aThreadPriority = ThreadPriority.Normal;
sleepTime = 0;
break;
case ThreadPriority.Normal:
// this is almost enough on dualcore systems for one cpu to gather epg and the other to insert it
sleepTime = 10;
break;
case ThreadPriority.BelowNormal: // on faster systems this might be enough for background importing
sleepTime = 20;
break;
case ThreadPriority.Lowest: // even a single core system is enough to use MP while importing.
sleepTime = 40;
break;
}
ImportParams param = new ImportParams();
param.ProgramList = new ProgramList(aProgramList);
param.ProgamsToDelete = progamsToDelete;
param.SleepTime = sleepTime;
param.Priority = aThreadPriority;
lock (_programInsertsQueue)
{
_programInsertsQueue.Enqueue(param);
_pendingProgramInserts.Set();
if (_insertProgramsThread == null)
{
_insertProgramsThread = new Thread(InsertProgramsThreadStart)
{
Priority = ThreadPriority.Lowest,
Name = "SQL EPG importer",
IsBackground = true
};
_insertProgramsThread.Start();
}
}
return aProgramList.Count;
}
catch (Exception ex)
{
Log.Error("BusinessLayer: InsertPrograms error - {0}, {1}", ex.Message, ex.StackTrace);
return 0;
}
}