To Speed up the Digital signing process in multithread appliaction in WPF c#

95 Views Asked by At

Here is my Code:

            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;

            }

here i am carrying out signing process in "ProcessFiles" method

Previously i used to use ".pfx" file to sign PDF/HTML files in 30 minutes. Now i forced to use certificate which is located on an e-token (attached to USB port), then the same process takes approx. 6 hours.

i am working on WPF/C# application

For HTML signing i have used Chilkat. For PDF signing i have used Itextsharp

any suggestion to speed up the process?

0

There are 0 best solutions below