2010-09-02 4 views
2

J'ai besoin d'induire un retard variable dans vb.net. Le système devrait être sensiblement plus lent.Induire le retard du système dans vb.net

Je peux augmenter l'utilisation de l'UC du programme avec des boucles infinies et certaines créations/assignations de variables, mais comment puis-je réellement provoquer un décalage? Je comprends qu'il s'agit d'une demande étrange, mais j'apprécie toute aide et j'apprécierais qu'il soit pris au sérieux. Ce n'est pas utilisé malicieusement. Je voudrais avoir un sous-marin "InvokeLag" qui effectuera une action pour ralentir l'ordinateur, plus vite la fonction est appelée, plus vite elle est retardée. La fonction doit être aussi banale que possible, ne rien modifier ou faire quoi que ce soit pour causer des dommages autres qu'un simple décalage.

Merci pour votre aide!

EDIT: De préférence seulement atteindre cet effet avec des opérations mathématiques fous et de faire des variables et autres. Rien système si possible.

Répondre

1

Qu'en est-il de la création d'un nouveau thread avec la plus haute priorité? Calculer Pi ne finira jamais et avec une haute priorité, il devrait retarder votre système. Si vous avez plusieurs processeurs, vous pouvez démarrer plusieurs threads pour calculer pi ou avoir un programme séparé qui calcule pi et démarrer plusieurs processus de celui-ci?

Public Class Test 
    Shared Sub Main() 

     Dim threadLag As Thread = _ 
      New Thread(AddressOf CalculatePi) 
     threadLag.Name = "ThreadWait" 
     threadLag.Priority = ThreadPriority.Highest 
     threadLag.Start() 
    End Sub 

    Private Sub LagRoutine() 
     While True 
      Thread.SpinWait(10000) 
     End While 
    End Sub 

End Class 

ou

Public Class Test 
    Shared Sub Main() 
     For i as Integer = 1 to 10 
      Dim p As New Process("C:\MyLagProgram.exe") 
      p.Start() 
     Next i 
    End Sub 

End Class 

CalculatePi

MSDN

Mise à jour:

Je pense que Eric pourrait avoir un bon point sur SpinWait et il pourrait être plus que vous recherchez:

La méthode SpinWait est utile pour les verrous d'implémentation . Classes dans le .NET Framework, tels que Monitor et ReaderWriterLock, utilisent cette méthode en interne. SpinWait met essentiellement le processeur dans une boucle très serrée, avec le nombre de boucles spécifié par le paramètre itérations . La durée de l'attente dépend donc de la vitesse du processeur. Comparez-le avec la méthode Sleep.

Un thread qui appelle le sommeil donne le reste de son tranche actuelle de processeur fois, même si l'intervalle spécifié est zéro. La spécification d'un intervalle non nul pour Sleep annule la prise en compte du thread par le thread jusqu'à expiration de l'intervalle de temps .

Il n'y a pas d'E/S système, c'est simplement une boucle serrée qui n'abandonne pas son temps de traitement. Je suis sûr que si vous avez utilisé ma suggestion de générer plusieurs threads avec la plus haute priorité avec la suggestion d'Eric SpinWait, vous obtiendrez ce que vous cherchez. Cela réduirait également la quantité de code que vous auriez besoin d'écrire.

+0

Cette méthode cause du lag, définitivement. J'ai fait trois fils, deux sont au plus haut et le dernier est abovenormal. L'utilisation de mem augmentait lentement, y a-t-il un moyen pour que trois threads effectuent une boucle infinie de déclaration de variable de chaîne et que l'affectation puisse potentiellement endommager mon ordinateur? – Cyclone

+0

@Cyclone: ​​Les chaînes sont immuables, donc elles vont lentement manger de la mémoire. Cependant, cela ne nuira pas à votre ordinateur. Votre programme va planter si vous allez plus de 1.5gigs sur l'ordinateur 32 bits. C'est extrêmement difficile à atteindre. Je travaillais sur un grand projet et bloquais accidentellement mes finaliseurs et mon programme allait planter, mais je doute fortement que vous fassiez un crash avec des ficelles. Stress tester et voir combien de temps il peut courir avant qu'il ne se bloque. –

+0

Les tests de résistance vont maintenant commencer. Merci de votre aide! – Cyclone

0

Que diriez-vous d'externalisation de retard de votre système à un autre processus tout à fait:

System.Diagnostics.Process.Start("Outlook.exe") 

Sérieusement cependant, que le système a besoin d'être ralenti par votre processus & ses calculs, ou pouvez-vous compter sur d'autres processus pour générer la CPU usage? Cela dépend de ce que vous essayez de mesurer. Il semble que l'augmentation de l'utilisation du processeur pour atteindre 100% est ce que vous ciblez.

Appelez peut-être SysInfo ou Vista/Win7, appelez Windows Experience Index. Je sais que vous avez mis à jour votre question avec «système de rien», mais est-ce important?

+0

L'utilisation du processeur supérieure à 100% est probablement la meilleure. Cela ne peut pas utiliser d'autres processus. – Cyclone

0

Il peut être utile de définir un décalage. Si vous cherchez simplement à augmenter le processeur, quelques threads et quelques boucles feront l'affaire (comme vous l'avez mentionné). Vous pouvez également utiliser la méthode SpinWait() sur la classe System.Threading.Thread. Cependant, d'après votre message, il semble que ce n'est pas acceptable ... peut-être que cela ne simule pas adéquatement ce que vous voulez faire? Cherchez-vous à provoquer le disque dur à battre un peu? Quand je pense au décalage, je pense généralement au système de pagination entre le disque et la mémoire. Si c'est le cas, vous pouvez simuler tout cela vous-même en lisant et en écrivant quelques gros fichiers de n'importe quoi (données indésirables).

+0

Bon point. La définition de Lag n'a pas été correctement définie. –

+0

Par retard, je veux dire que l'ordinateur ralentit, les programmes ne répondent pas, et peut-être que la souris est laggy. – Cyclone

Questions connexes