-3
votes

Comment créer 300 chronomètres en C # plus efficacement?

Je crée une application UWP qui doit mesurer l'heure à laquelle l'utilisateur examine un objet. Cette application a environ 300 objets pour mesurer l'heure de. Pour ce faire, nous utiliserons environ 300 minuteries. Pour y parvenir, nous devrons créer 300 chronomètres individuellement, ce qui est hautement inefficace.

La minuterie commence lorsque l'utilisateur examine l'objet correspondant et s'arrête lorsque l'utilisateur ne regarde plus l'objet correspondant. Si le regard de l'utilisateur est correctement fixé sur l'objet correspondant à nouveau, la minuterie bien sûr commence à nouveau. À la fin, tous les temps des chronomes seront enregistrés dans un fichier. La création de 300 chronomètres nécessite une nouvelle ligne de code pour chaque chronomètre qui ne semble pas très efficace. J'ai essayé d'automatiser le processus de création de chronomètre en utilisant Enumérable.Range, mais jusqu'à présent, je n'ai pas été en mesure de trouver une solution. P>

    /// <summary>
    /// All stopwatches for every word. In our real code we will have around 300 stopwatches.
    /// </summary>
    Stopwatch Stopwatch1 = new Stopwatch();
    Stopwatch Stopwatch2 = new Stopwatch();
    Stopwatch Stopwatch3 = new Stopwatch();
    Stopwatch Stopwatch4 = new Stopwatch();
    Stopwatch Stopwatch5 = new Stopwatch();
    Stopwatch Stopwatch6 = new Stopwatch();
    Stopwatch Stopwatch7 = new Stopwatch();
    Stopwatch Stopwatch8 = new Stopwatch();
    Stopwatch Stopwatch9 = new Stopwatch();
    Stopwatch Stopwatch10 = new Stopwatch();


4 commentaires

Pourquoi ne créez-vous pas une liste puis utilisez une boucle pour initialiser l'ammé de chronomètre requis?


blog.submain.com/c-array


Vous n'avez besoin que de 1 chronomètre et un endroit pour stocker la quantité de temps qu'un objet a été examiné avant. Puis incrémentez-vous quand il est redeviendé.


@Esko - c'est-à-dire s'il ne peut pas être plusieurs serrures simultanées


3 Réponses :


0
votes

Définir uniquement la liste () xxx

Pour vous montrer comment traiter cet exemple xxx < / pré>


0 commentaires

2
votes

Ainsi, au début, vous devez obtenir une liste des objets disponibles. Vous pouvez utiliser le code suivant pour créer un dictionnaire générique qui conserve un chronomètre pour chaque objet que vous avez. Il existe également un exemple de mise en œuvre d'une méthode qui génère une enquête de gasting.

Vous devez toujours ajouter le code qui appelle les méthodes de démarrage et d'arrêt. P>

class Program
{
    static Dictionary<object, Stopwatch> stopwatchesByObject;

    static void Main(string[] args)
    {
        List<object> objects = new List<object>();

        // now you have to fill the objects list...

        stopwatchesByObject = new Dictionary<object, Stopwatch>();
        foreach (var o in objects)
        {
            stopwatchesByObject.Add(o, new Stopwatch());
        }
    }

    // Call this method when the user starts gazing at object o
    static void StartGazingAt(object o)
    {
        stopwatchesByObject[o].Start();
    }

    // Call this method when the user stops gazing at object o
    static void StopGazingAt(object o)
    {
        stopwatchesByObject[o].Stop();
    }

    static void CreateStatistics()
    {
        StringBuilder sb = new StringBuilder();
        foreach (var entry in stopwatchesByObject)
        {
            sb.AppendLine($"Gazed at {entry.Key.ToString()} for {entry.Value.Elapsed.TotalSeconds} seconds.");
        }
        File.WriteAllText("c:\\temp\\statictics.txt", sb.ToString());
    }
}


0 commentaires

1
votes

J'ai aimé l'approche des malades Stefan et je voulais ajouter de la magie de Linq, qui, imo, est vraiment soignée et bonne lisible.

using System.Linq;

var myListOfItemsToWatch = new List<object> { "foo", "bar", "baz" };
var listOfStopwatches = myListOfItemsToWatch.ToDictionary(watchItem =>
        watchItem, i => new Stopwatch()
);


0 commentaires