Table des matières
[Exemple de projet open source WPF MaterialDesign] Travail Time Manager
[.net] Créez votre propre composant de journal - version améliorée
Maison développement back-end Tutoriel C#.Net Introduction à l'exemple de projet open source WPF MaterialDesign

Introduction à l'exemple de projet open source WPF MaterialDesign

Jun 23, 2017 pm 03:01 PM
manager time 开源 项目

Bonjour à tous, je suis de retour

Cette fois, nous avons vraiment commencé à parler des idées de développement de modules ou de composants petits mais utiles en open source projets .

Dans le même temps, le logiciel a été mis à jour vers la version 1.60, qui prend en charge l'enregistrement de nouveaux utilisateurs, et vous ne pouvez plus utiliser de compte de test unifié.

Vous pouvez le télécharger via le chemin suivant :

1. Partagez le projet sur GitHub, téléchargez-le localement, générez-le et vous pourrez obtenir la dernière version de le programme.

2. Les utilisateurs qui exécutent la version bêta v0.5 peuvent directement cliquer sur Mettre à jour dans le coin supérieur droit du programme

3 Le package final pour les développeurs non Microsoft est le suivant compressé. package, qui peut être directement décompressé disponible.


Si vous ne savez toujours pas ce qu'est le logiciel, vous pouvez consulter cet article de blog :

[Exemple de projet open source WPF MaterialDesign] Travail Time Manager

Aujourd'hui, nous parlons du composant log du client.

Je ne sais pas si les composants sont appropriés. Quoi qu'il en soit, ce sont des petits modules qui font partie du logiciel et qui peuvent être réutilisés.

Cette fois, la classe de journal est un composant très typique. Le journal a de nombreuses caractéristiques

1 Sera utilisé n'importe où dans le logiciel

2.

3. Utilisation extrêmement élevée

4. Opérations io fréquentes

Quand je viens d'entrer en contact avec c#, j'ai eu J'utilisais Log4net quand j'étais enfant, mais l'idée qui m'est venue à l'esprit à ce moment-là était que mon programme ne mesurerait peut-être que quelques mètres et qu'un composant de journal serait plus grand que mon programme principal. C'était évidemment inapproprié.

Ainsi, avant d'obtenir mon diplôme il y a deux ans, j'ai commencé à fabriquer mon premier composant de bûche.

[.net] Créez votre propre composant de journal - version améliorée

L'idée de base est toujours bonne, notamment : les fils de discussion, le blocage, la concurrence entre les ressources, etc. ont été pris en compte.

Comme le dit le proverbe, un veau nouveau-né n'a pas peur des tigres, alors il a juste commencé à le faire sans rien savoir.

Écrit la première version du composant log en ouvrant des threads.

Cependant, après tout, il est jeune et le problème est toujours évident. Taper 100 messages en une seconde ne fonctionnera pas.

Alors, quand j'ai recommencé le développement en C#, j'ai pris le temps de refactoriser.

Tout d'abord, commencez par l'architecture globale :
- Caractéristiques des anciens composants :
* Utilisez la file d'attente multithread, en utilisant des variables mutuellement exclusives pour contrôler l'écriture du texte par thread.
* Contrôlez les conflits de ressources grâce au verrouillage singleton
* Les threads sont sélectionnés au hasard pour le verrouillage et la séquence temporelle écrite du journal est peut-être erronée
* Un thread effectue une opération de texte, les commutateurs sont actionnés dans un seul thread et une seule variable est écrite à la fois
- Avantages :
* Fonctionnement multithread, améliorant superficiellement l'efficacité opérationnelle
* Verrouillage d'instance unique pour garantir l'unicité
- Inconvénients :
* Faibles performances, fonctionnement io excessif Conduisant à une redondance sévère dans les performances
* N'écrire qu'un seul morceau à la fois
- Amélioration
* Utiliser le modèle producteur-consommateur, opérations séparées , et limitez le nombre de threads
* Utilisez la file d'attente de pile, premier entré, premier sorti pour garantir l'ordre des journaux
* Variable IO à instance unique, opérations d'écriture par lots
Résultats de la transformation :
using System;using System.Collections;using System.IO;using System.Text;using System.Threading;using System.Windows.Threading;namespace Helper
{public static class LogHelper
    {private static readonly Queue LogQueue = new Queue();private static bool _isStreamClose = true;private static bool _isThreadBegin = false;private static StreamWriter _fileStreamWriter;private static readonly string fileName =@"BugLog.txt";static int _intervalTime = 10000;// 10sstatic System.Timers.Timer _timer = new System.Timers.Timer(_intervalTime);/// <summary>/// 添加日志队列/// </summary>/// <param name="message"></param>public static void AddLog(string message)
        {string logContent = $"[{DateTime.Now:yyyy-MM-dd hh:mm:ss}] =>{message}";
            LogQueue.Enqueue(logContent);if (!_isThreadBegin)
            {
                BeginThread();
            }
        }public static void AddLog(Exception ex)
        {var logContent = $"[{DateTime.Now:yyyy-MM-dd hh:mm:ss}]错误发生在:{ex.Source},\r\n 内容:{ex.Message}";
            logContent += $"\r\n  跟踪:{ex.StackTrace}";
            LogQueue.Enqueue(logContent);if (!_isThreadBegin)
            {
                BeginThread();
            }
        }/// <summary>/// 读取日志队列的一条数据/// </summary>/// <returns></returns>private static object GetLog()
        {return LogQueue.Dequeue();
        }/// <summary>/// 开启定时查询线程/// </summary>public static void BeginThread()
        {
            _isThreadBegin = true;//实例化Timer类,设置间隔时间为10000毫秒;     _timer.Interval = _intervalTime;

            _timer.Elapsed += SetLog;//到达时间的时候执行事件;   _timer.AutoReset = true;//设置是执行一次(false)还是一直执行(true);     _timer.Enabled = true;
        }/// <summary>/// 写入日志/// </summary>private static void SetLog(object source, System.Timers.ElapsedEventArgs e)
        {if (LogQueue.Count == 0)
            {if (_isStreamClose) return;
                _fileStreamWriter.Flush();
                _fileStreamWriter.Close();
                _isStreamClose = true;return;
            }if (_isStreamClose)
            {
                Isexist();string errLogFilePath = Environment.CurrentDirectory + @"\Log\" + fileName.Trim();if (!File.Exists(errLogFilePath))
                {
                    FileStream fs1 = new FileStream(errLogFilePath, FileMode.Create, FileAccess.Write);
                    _fileStreamWriter = new StreamWriter(fs1);
                }else{
                    _fileStreamWriter = new StreamWriter(errLogFilePath, true);
                }
                _isStreamClose = false;
            }var strLog = new StringBuilder();var onceTime = 50;var lineNum = LogQueue.Count > onceTime ? onceTime : LogQueue.Count;for (var i = 0; i < lineNum; i++)
            {
                strLog.AppendLine(GetLog().ToString());
            }

            _fileStreamWriter.WriteLine(strLog.ToString());

        }/// <summary>/// 判断是否存在日志文件/// </summary>private static void Isexist()
        {string path = Environment.CurrentDirectory + @"\Log\";if (!File.Exists(path))
            {
                Directory.CreateDirectory(path);
            }
        }
    }
}
Copier après la connexion

Le code n'a pas l'application de composants tiers, copiez simplement ce fichier et utilisez-le.

Nous n'avons pas traité certaines situations particulières pour le moment, telles que l'occupation des fichiers journaux, l'arrêt temporaire du logiciel et des considérations telles que le temps de déclenchement de la file d'attente et le numéro d'écriture par lots. Ceci est juste une démo de base, <.>

Bien sûr, si vous souhaitez connaître les améliorations ultérieures, vous pouvez suivre le GitHub du projet.

Bien sûr, j'attends avec impatience vos meilleures suggestions et apprenons ensemble. Si vous avez une bonne idée mais que vous ne voulez pas l'écrire vous-même, je vous aiderai à la réaliser. !


Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Commandes de chat et comment les utiliser
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Dix outils d'annotation de texte gratuits open source recommandés Dix outils d'annotation de texte gratuits open source recommandés Mar 26, 2024 pm 08:20 PM

L'annotation de texte est le travail d'étiquettes ou de balises correspondant à un contenu spécifique dans le texte. Son objectif principal est d’apporter des informations complémentaires au texte pour une analyse et un traitement plus approfondis, notamment dans le domaine de l’intelligence artificielle. L'annotation de texte est cruciale pour les tâches d'apprentissage automatique supervisées dans les applications d'intelligence artificielle. Il est utilisé pour entraîner des modèles d'IA afin de mieux comprendre les informations textuelles en langage naturel et d'améliorer les performances de tâches telles que la classification de texte, l'analyse des sentiments et la traduction linguistique. Grâce à l'annotation de texte, nous pouvons apprendre aux modèles d'IA à reconnaître les entités dans le texte, à comprendre le contexte et à faire des prédictions précises lorsque de nouvelles données similaires apparaissent. Cet article recommande principalement de meilleurs outils d'annotation de texte open source. 1.LabelStudiohttps://github.com/Hu

15 outils d'annotation d'images gratuits open source recommandés 15 outils d'annotation d'images gratuits open source recommandés Mar 28, 2024 pm 01:21 PM

L'annotation d'images est le processus consistant à associer des étiquettes ou des informations descriptives à des images pour donner une signification et une explication plus profondes au contenu de l'image. Ce processus est essentiel à l’apprentissage automatique, qui permet d’entraîner les modèles de vision à identifier plus précisément les éléments individuels des images. En ajoutant des annotations aux images, l'ordinateur peut comprendre la sémantique et le contexte derrière les images, améliorant ainsi la capacité de comprendre et d'analyser le contenu de l'image. L'annotation d'images a un large éventail d'applications, couvrant de nombreux domaines, tels que la vision par ordinateur, le traitement du langage naturel et les modèles de vision graphique. Elle a un large éventail d'applications, telles que l'assistance aux véhicules pour identifier les obstacles sur la route, en aidant à la détection. et le diagnostic des maladies grâce à la reconnaissance d'images médicales. Cet article recommande principalement de meilleurs outils d'annotation d'images open source et gratuits. 1.Makesens

L'IA peut-elle vaincre le dernier théorème de Fermat ? Un mathématicien a abandonné 5 ans de sa carrière pour transformer 100 pages de preuve en code L'IA peut-elle vaincre le dernier théorème de Fermat ? Un mathématicien a abandonné 5 ans de sa carrière pour transformer 100 pages de preuve en code Apr 09, 2024 pm 03:20 PM

Le dernier théorème de Fermat, sur le point d'être conquis par l'IA ? Et la partie la plus significative de tout cela est que le dernier théorème de Fermat, que l’IA est sur le point de résoudre, vise précisément à prouver que l’IA est inutile. Autrefois, les mathématiques appartenaient au domaine de l’intelligence humaine pure ; aujourd’hui, ce territoire est déchiffré et piétiné par des algorithmes avancés. Image Le dernier théorème de Fermat est une énigme « notoire » qui intrigue les mathématiciens depuis des siècles. Cela a été prouvé en 1993, et les mathématiciens ont désormais un grand projet : recréer la preuve à l’aide d’ordinateurs. Ils espèrent que toute erreur logique dans cette version de la preuve pourra être vérifiée par un ordinateur. Adresse du projet : https://github.com/riccardobrasca/flt

Regardons de plus près PyCharm : un moyen rapide de supprimer des projets Regardons de plus près PyCharm : un moyen rapide de supprimer des projets Feb 26, 2024 pm 04:21 PM

Titre : En savoir plus sur PyCharm : Un moyen efficace de supprimer des projets Ces dernières années, Python, en tant que langage de programmation puissant et flexible, a été privilégié par de plus en plus de développeurs. Dans le développement de projets Python, il est crucial de choisir un environnement de développement intégré efficace. En tant qu'environnement de développement intégré puissant, PyCharm fournit aux développeurs Python de nombreuses fonctions et outils pratiques, notamment la suppression rapide et efficace des répertoires de projet. Ce qui suit se concentrera sur la façon d'utiliser la suppression dans PyCharm

Conseils pratiques PyCharm : convertir le projet en fichier EXE exécutable Conseils pratiques PyCharm : convertir le projet en fichier EXE exécutable Feb 23, 2024 am 09:33 AM

PyCharm est un puissant environnement de développement intégré Python qui fournit une multitude d'outils de développement et de configurations d'environnement, permettant aux développeurs d'écrire et de déboguer du code plus efficacement. Lors du processus d'utilisation de PyCharm pour le développement de projets Python, nous devons parfois regrouper le projet dans un fichier EXE exécutable pour l'exécuter sur un ordinateur sur lequel aucun environnement Python n'est installé. Cet article explique comment utiliser PyCharm pour convertir un projet en fichier EXE exécutable et donne des exemples de code spécifiques. tête

Recommandé : Excellent projet de détection et de reconnaissance des visages open source JS Recommandé : Excellent projet de détection et de reconnaissance des visages open source JS Apr 03, 2024 am 11:55 AM

La technologie de détection et de reconnaissance des visages est déjà une technologie relativement mature et largement utilisée. Actuellement, le langage d'application Internet le plus utilisé est JS. La mise en œuvre de la détection et de la reconnaissance faciale sur le front-end Web présente des avantages et des inconvénients par rapport à la reconnaissance faciale back-end. Les avantages incluent la réduction de l'interaction réseau et de la reconnaissance en temps réel, ce qui réduit considérablement le temps d'attente des utilisateurs et améliore l'expérience utilisateur. Les inconvénients sont les suivants : il est limité par la taille du modèle et la précision est également limitée ; Comment utiliser js pour implémenter la détection de visage sur le web ? Afin de mettre en œuvre la reconnaissance faciale sur le Web, vous devez être familier avec les langages et technologies de programmation associés, tels que JavaScript, HTML, CSS, WebRTC, etc. Dans le même temps, vous devez également maîtriser les technologies pertinentes de vision par ordinateur et d’intelligence artificielle. Il convient de noter qu'en raison de la conception du côté Web

Le document multimodal Alibaba 7B comprenant le grand modèle remporte le nouveau SOTA Le document multimodal Alibaba 7B comprenant le grand modèle remporte le nouveau SOTA Apr 02, 2024 am 11:31 AM

Nouveau SOTA pour des capacités de compréhension de documents multimodaux ! L'équipe Alibaba mPLUG a publié le dernier travail open source mPLUG-DocOwl1.5, qui propose une série de solutions pour relever les quatre défis majeurs que sont la reconnaissance de texte d'image haute résolution, la compréhension générale de la structure des documents, le suivi des instructions et l'introduction de connaissances externes. Sans plus tarder, examinons d’abord les effets. Reconnaissance et conversion en un clic de graphiques aux structures complexes au format Markdown : Des graphiques de différents styles sont disponibles : Une reconnaissance et un positionnement de texte plus détaillés peuvent également être facilement traités : Des explications détaillées sur la compréhension du document peuvent également être données : Vous savez, « Compréhension du document " est actuellement un scénario important pour la mise en œuvre de grands modèles linguistiques. Il existe de nombreux produits sur le marché pour aider à la lecture de documents. Certains d'entre eux utilisent principalement des systèmes OCR pour la reconnaissance de texte et coopèrent avec LLM pour le traitement de texte.

Fraichement publié! Un modèle open source pour générer des images de style anime en un seul clic Fraichement publié! Un modèle open source pour générer des images de style anime en un seul clic Apr 08, 2024 pm 06:01 PM

Permettez-moi de vous présenter le dernier projet open source AIGC-AnimagineXL3.1. Ce projet est la dernière itération du modèle texte-image sur le thème de l'anime, visant à offrir aux utilisateurs une expérience de génération d'images d'anime plus optimisée et plus puissante. Dans AnimagineXL3.1, l'équipe de développement s'est concentrée sur l'optimisation de plusieurs aspects clés pour garantir que le modèle atteigne de nouveaux sommets en termes de performances et de fonctionnalités. Premièrement, ils ont élargi les données d’entraînement pour inclure non seulement les données des personnages du jeu des versions précédentes, mais également les données de nombreuses autres séries animées bien connues dans l’ensemble d’entraînement. Cette décision enrichit la base de connaissances du modèle, lui permettant de mieux comprendre les différents styles et personnages d'anime. AnimagineXL3.1 introduit un nouvel ensemble de balises et d'esthétiques spéciales

See all articles