J'essaie d'optimiser un programme de sauvegarde que j'ai créé. Le code est bâclé parce que c'est mon premier programme de cette ampleur, mais j'espère que vous pouvez regarder plus loin.en utilisant Parallel.ForEach
Ce programme fonctionne correctement, mais il semble prendre plus de temps que nécessaire. Donc, je suis en train de jouer avec le Parallel.ForEach pour aider à optimiser le processus de compression.
En ce moment, je dois le programme faire passer comme un éclair la tâche de la façon suivante
Dim Destin = JobNode.SelectNodes("Destination")
For Each item As System.Xml.XmlNode In Destin
Dim time As DateTime = DateTime.Now
Dim format As String = "MMMddyyyy"
Dim zpath As String = item.InnerText
'replaces [date] in destination with actual Date
If time.DayOfWeek = 1 Then
time = time.AddDays(-1)
item.InnerText = Replace(item.InnerText, "[date]", time.ToString(format) & "_WE")
zpath = item.InnerText
zip.ParallelDeflateThreshold = -1
zip.Save(zpath)
Else
Dim time1 As DateTime = DateTime.Now.AddDays(-1)
item.InnerText = Replace(item.InnerText, "[date]", time1.ToString(format))
zpath = item.InnerText
zip.ParallelDeflateThreshold = -1
zip.Save(zpath)
End If
Next
je tous les emplacements de source et de destination enregistrées dans un fichier xml pour la lecture. Et cela pour chaque boucle fonctionne exactement comme je le veux. Cependant, j'ai du mal à convertir ceci Pour chaque boucle dans une boucle Parallel.ForEach.
Toute aide serait bien. Encore une fois, je suis toujours vert quand il s'agit de programmer, alors c'est idiot pour moi.
Et oui ... J'ai cherché de l'aide sur Internet mais cela me trouble, ne fonctionne pas dans mon contexte, ou je n'arrive pas à l'utiliser avec mon code.
Pourquoi pensez-vous qu'il prend plus de temps que nécessaire? Il y a de fortes chances que votre programme soit limité par la vitesse du lecteur de disque. Si vous utilisez Windows 7 (je ne sais pas sur Vista ou Windows 8), vous pouvez utiliser Resource Monitor, disponible dans l'onglet Performance du Gestionnaire des tâches (appuyez sur ctrl + shift + esc), pour voir ce qui se passe. sur. Dans l'onglet Vue d'ensemble, regardez les diagrammes CPU et Disque sur la droite. –
Eh bien je suppose que je ne sais pas à coup sûr si c'est complètement optimal. Je pense juste que le fait d'avoir chaque travail étant zippé sur un fil séparé DEVRAIT accélérer certains. Zipper chaque travail en même temps doit faire gagner du temps ... juste? – MaylorTaylor
Pas nécessairement: si le lecteur de disque doit déplacer la tête d'avant en arrière à plus d'endroits alors vous pourriez le ralentir en faisant des fichiers compressés en parallèle. Les tests révéleront si c'est le cas. Rappelez-vous qu'il doit déplacer la tête pour lire à partir du fichier source, puis le déplacer à nouveau pour écrire dans le fichier de destination. –