Для ускорения процесса цифровой подписи в многопоточном приложении в WPF C#

Вот мой код:

            int ThreadCount = FilteredViewTable.Count;
            int chunksize = ThreadCount + 1;
            int lastbatch = 0;
            int batchCount = 0;
            if (ThreadCount > chunksize)
            {
                batchCount = ThreadCount / chunksize;
                lastbatch = ThreadCount % chunksize;
            }
            else
                lastbatch = ThreadCount;

            if (lastbatch > 0)
                batchCount++;

            int endThread = 0;
            int counter = 0;
            while (counter < batchCount)
            {
                int StartPos = counter == 0 ? 0 : (endThread * counter);
                counter++;

                if (counter == batchCount && lastbatch != 0)
                    endThread = lastbatch;
                else
                    endThread = chunksize;

                int EndPos = endThread;

                ObservableCollection<ManualSendingData> dtTempFilteredData = new ObservableCollection<ManualSendingData>();
                mnThreadCount = 1;
                Int32 lnRowCount = 0;
                Decimal RowsPerThread = 0;
                Array.Resize(ref moProcessFilesThreads, mnThreadCount);

                Array.Resize(ref moDataTables, mnThreadCount);
                Array.Resize(ref moEmailThreadsErrors, mnThreadCount);
                Array.Resize(ref mcThreadsErrors, mnThreadCount);
                Array.Resize(ref mnMailCount, mnThreadCount);

                RowsPerThread = Math.Round(Convert.ToDecimal(endThread / GlobalStatic.gcThreads), 0);
                List<ManualSendingData> lo = FilteredViewTable.Skip(StartPos).Take(endThread).ToList();


                foreach (ManualSendingData drRow in lo)
                {
                    lnRowCount += 1;
                    moMainDataTable.Where(item => item.ClientCode == drRow.ClientCode).ToList().ForEach((DataItem) =>
                    {
                        dtTempFilteredData.Add(DataItem);
                    });
                    if (lnRowCount == RowsPerThread)
                    {
                        Array.Resize(ref moProcessFilesThreads, mnThreadCount);
                        Array.Resize(ref moDataTables, mnThreadCount);
                        Array.Resize(ref moEmailThreadsErrors, mnThreadCount);
                        Array.Resize(ref mcThreadsErrors, mnThreadCount);
                        Array.Resize(ref mnMailCount, mnThreadCount);
                        moDataTables[mnThreadCount - 1] = new ObservableCollection<ManualSendingData>();
                        moDataTables[mnThreadCount - 1] = new ObservableCollection<ManualSendingData>(dtTempFilteredData);
                        mnMailCount[mnThreadCount - 1] = Convert.ToInt32(dtTempFilteredData.Count);
                        moProcessFilesThreads[mnThreadCount - 1] = new Thread(new ParameterizedThreadStart(ProcessFiles));
                        moProcessFilesThreads[mnThreadCount - 1].Name = (mnThreadCount - 1).ToString();
                        moProcessFilesThreads[mnThreadCount - 1].Start((object)dtTempFilteredData);
                        lnRowCount = 0;
                        mnThreadCount += 1;
                        dtTempFilteredData = new ObservableCollection<ManualSendingData>();
                    }
                }
                List<int> CompletedThreads = new List<int>();
                int inTableCount = 0;
                int inRowCount = 0;

            }

здесь я выполняю процесс подписания в методе "ProcessFiles"

Ранее я использовал файл ".pfx" для подписи файлов PDF/HTML за 30 минут. Теперь я вынужден использовать сертификат, который находится на e-токене (подключен к USB-порту), затем тот же процесс занимает ок. 6 часов.

я работаю над приложением WPF/C#

Для подписи HTML я использовал Chilkat. Для подписи в PDF я использовал Itextsharp

Любое предложение ускорить процесс?

0 ответов

Другие вопросы по тегам