Ignore:
Timestamp:
Oct 27, 2009, 8:16:26 PM (12 years ago)
Author:
kopal
Message:

KeySearcher - some small speed optimizations

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/CrypPlugins/KeySearcher/KeySearcher.cs

    r785 r793  
    287287                    return;
    288288                }
    289                 string key;
     289 
    290290                double keycounter = 0;
    291291                double doneKeys = 0;
     
    295295                do
    296296                {
    297                     valueKey = new ValueKey();
     297                   
    298298                    try
    299299                    {
     
    328328                    if (this.costMaster.getRelationOperator() == RelationOperator.LargerThen)
    329329                    {
    330 
     330                        if(valueKey.value > costList.Last().value){                           
     331                            node = costList.First;
     332                            while (node != null)
     333                            {
     334
     335                                if (valueKey.value > node.Value.value)
     336                                {
     337                                    costList.AddBefore(node, valueKey);
     338                                    costList.RemoveLast();
     339                                    break;
     340                                }
     341                                node = node.Next;
     342                            }//end while
     343                        }//end if
     344                    }
     345                    else
     346                    {
    331347                        node = costList.First;
    332                         while (node != null)
     348                        if (valueKey.value < costList.Last().value)
    333349                        {
    334 
    335                             if (valueKey.value > node.Value.value)
     350                            while (node != null)
    336351                            {
    337                                 costList.AddBefore(node, valueKey);
    338                                 break;
    339                             }
    340                             node = node.Next;
    341                         }
    342                     }
    343                     else
    344                     {
    345                         node = costList.First;
    346 
    347                         while (node != null)
    348                         {
    349 
    350                             if (valueKey.value < node.Value.value)
    351                             {
    352                                 costList.AddBefore(node, valueKey);
    353                                 break;
    354                             }
    355                             node = node.Next;
    356                         }
    357                     }
    358                     if (costList.Count > maxInList)
    359                     {
    360                         costList.RemoveLast();
    361                     }
    362 
    363                     keycounter++;                   
    364                     ProgressChanged(keycounter, size);
    365 
    366                     //Key per second calculation
    367                     doneKeys++;
     352
     353                                if (valueKey.value < node.Value.value)
     354                                {
     355                                    costList.AddBefore(node, valueKey);
     356                                    costList.RemoveLast();
     357                                    break;
     358                                }
     359                                node = node.Next;
     360                            }//end while
     361                        }//end if
     362                    }
     363                   
     364                    keycounter++;
     365                    doneKeys++;
    368366                    TimeSpan duration = DateTime.Now - lastTime;
    369367                    if (duration.Seconds >= 1)
    370368                    {
    371                         lastTime = DateTime.Now;
    372                         double time = ((size - keycounter) / doneKeys);                       
    373                         TimeSpan timeleft = new TimeSpan(-1) ;
    374 
    375                         try
     369                        ProgressChanged(keycounter, size);
     370                       
     371                        if (QuickWatchPresentation.IsVisible)
    376372                        {
    377                             if (time / (24 * 60 * 60) <= int.MaxValue)
     373                            lastTime = DateTime.Now;
     374                            double time = ((size - keycounter) / doneKeys);
     375                            TimeSpan timeleft = new TimeSpan(-1);
     376
     377                            try
    378378                            {
    379                                 int days = (int)(time / (24 * 60 * 60));
    380                                 time = time - (days * 24 * 60 * 60);
    381                                 int hours = (int)(time / (60 * 60));
    382                                 time = time - (hours * 60 * 60);
    383                                 int minutes = (int)(time / 60);
    384                                 time = time - (minutes * 60);
    385                                 int seconds = (int)time;
    386 
    387                                 timeleft = new TimeSpan(days, hours, minutes, (int)seconds, 0);
    388                             }                           
    389                         }
    390                         catch
    391                         {
    392                             //can not calculate time span
    393                         }
    394                         ((KeySearcherQuickWatchPresentation)QuickWatchPresentation).Dispatcher.Invoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
    395                         {
    396                             ((KeySearcherQuickWatchPresentation)QuickWatchPresentation).keysPerSecond.Text = "" + doneKeys;
    397                             if (timeleft != new TimeSpan(-1))
     379                                if (time / (24 * 60 * 60) <= int.MaxValue)
     380                                {
     381                                    int days = (int)(time / (24 * 60 * 60));
     382                                    time = time - (days * 24 * 60 * 60);
     383                                    int hours = (int)(time / (60 * 60));
     384                                    time = time - (hours * 60 * 60);
     385                                    int minutes = (int)(time / 60);
     386                                    time = time - (minutes * 60);
     387                                    int seconds = (int)time;
     388
     389                                    timeleft = new TimeSpan(days, hours, minutes, (int)seconds, 0);
     390                                }
     391                            }
     392                            catch
    398393                            {
    399                                 ((KeySearcherQuickWatchPresentation)QuickWatchPresentation).timeLeft.Text = "" + timeleft;
    400                                 try
     394                                //can not calculate time span
     395                            }
     396
     397                            ((KeySearcherQuickWatchPresentation)QuickWatchPresentation).Dispatcher.Invoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
     398                            {
     399                                ((KeySearcherQuickWatchPresentation)QuickWatchPresentation).keysPerSecond.Text = "" + doneKeys;
     400                                if (timeleft != new TimeSpan(-1))
    401401                                {
    402                                     ((KeySearcherQuickWatchPresentation)QuickWatchPresentation).endTime.Text = "" + DateTime.Now.Add(timeleft);
    403                                 }catch{
     402                                    ((KeySearcherQuickWatchPresentation)QuickWatchPresentation).timeLeft.Text = "" + timeleft;
     403                                    try
     404                                    {
     405                                        ((KeySearcherQuickWatchPresentation)QuickWatchPresentation).endTime.Text = "" + DateTime.Now.Add(timeleft);
     406                                    }catch{
     407                                        ((KeySearcherQuickWatchPresentation)QuickWatchPresentation).endTime.Text = "in a galaxy far, far away...";
     408                                    }
     409                                }
     410                                else
     411                                {
     412                                    ((KeySearcherQuickWatchPresentation)QuickWatchPresentation).timeLeft.Text = "incalculable :-)";
    404413                                    ((KeySearcherQuickWatchPresentation)QuickWatchPresentation).endTime.Text = "in a galaxy far, far away...";
    405414                                }
    406                             }
    407                             else
    408                             {
    409                                 ((KeySearcherQuickWatchPresentation)QuickWatchPresentation).timeLeft.Text = "incalculable :-)";
    410                                 ((KeySearcherQuickWatchPresentation)QuickWatchPresentation).endTime.Text = "in a galaxy far, far away...";
    411                             }
    412                            
    413 
    414                         }
    415                         , null);
    416                         doneKeys = 0;
    417 
    418                         if (QuickWatchPresentation.IsVisible)
    419                         {                                                       
    420                            
    421                             ((KeySearcherQuickWatchPresentation)QuickWatchPresentation).Dispatcher.Invoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
    422                             {
     415                             
    423416                                ((KeySearcherQuickWatchPresentation)QuickWatchPresentation).listbox.Items.Clear();
    424417                                linkedListNode = costList.First;
     
    434427                            }
    435428                            , null);
    436                         }
    437                     }
     429                        }//end if
     430                        doneKeys = 0;
     431                    }//end if
    438432
    439433                } while (Pattern.nextKey() && !stop);
     
    459453                }
    460454
     455                if(!stop)
     456                    ProgressChanged(1, 1);
     457
    461458            }//end if
    462459        }
Note: See TracChangeset for help on using the changeset viewer.