目次
[WPF MaterialDesign サンプル オープン ソース プロジェクト] Work Time Manager
基本的なアイデアは依然として優れており、スレッド、ブロッキング、リソース競合などが考慮されています。
ホームページ バックエンド開発 C#.Net チュートリアル WPF MaterialDesign サンプル オープン ソース プロジェクトの紹介

WPF MaterialDesign サンプル オープン ソース プロジェクトの紹介

Jun 23, 2017 pm 03:01 PM
manager time オープンソース プロジェクト

こんにちは、また戻ってきました

今回は、オープンソースプロジェクトにおける小さいながらも有用なモジュールやコンポーネントの開発アイデアについて本格的に話し合い始めました。

同時に、ソフトウェアは新規ユーザー登録に対応したバージョン1.60にアップデートされ、統合テストアカウントは使用できなくなりました。

次のパスからダウンロードできます:

1. GitHub でプロジェクトをフォローし、ローカルにダウンロードして生成すると、プログラムの最新バージョンを入手できます。

2. ローカル バージョンがベータ版 v0.5 であるユーザーは、プログラムの右上隅にある [更新] を直接クリックできます

3. 最後に、次の圧縮パッケージが Microsoft 以外の開発者に提供されており、解凍後に直接使用できます。 。


まだそれが何のソフトウェアなのかわからない場合は、次のブログ投稿をチェックしてください:

[WPF MaterialDesign サンプル オープン ソース プロジェクト] Work Time Manager

今日は、クライアントについて話します。サイドログコンポーネント。

コンポーネントが適切かどうかはわかりませんが、ソフトウェアの一部であり、再利用できる小さなモジュールです。

今回のログ クラスは非常に典型的なコンポーネントです。

1. ソフトウェアのどこでも使用されます。

3. 使用率は次のとおりです。非常に高い

4. 頻繁な io 操作

私が初めて C# に触れたとき、私は Log4net を使用しましたが、その時に頭に浮かんだのは、自分のプログラムはほんの数メートルかもしれないということでした。サイズ的には、ログコンポーネントで十分です。私のメインプログラムと比較すると、これは明らかに不適切です。

そこで、2 年前に卒業する前に、最初のログ コンポーネントを作成し始めました。

【.net】独自のログコンポーネントを作成する - 改良版

基本的なアイデアは依然として優れており、スレッド、ブロッキング、リソース競合などが考慮されています。

「生まれたばかりの子牛はトラを怖がらない」という諺の通り、何も知らずに始めたばかりです。

スレッドを開いてログコンポーネントの最初のバージョンを作成しました。

しかし、結局のところ、私は若いので、問題はまだ明らかです。 1 秒間に 100 件のメッセージを入力しても機能しません。

それで、C# 開発を再開したとき、リファクタリングに少し時間をかけました。

まず全体的なアーキテクチャから始めましょう:

- 古いコンポーネントの機能:
* マルチスレッドキューを使用し、スレッドのテキスト書き込みを制御するためにミューテックス変数を使用します。

* シングルトンロックを通じてリソースの競合を制御します
* スレッドはロックのためにランダムに選択され、書き込まれたログ時間の順序が間違っている可能性があります
* 1 つのスレッドは 1 つのテキスト操作を実行し、スイッチはすべて1 つのスレッド操作で、一度に 1 つの変数のみを書き込みます
- 利点:
* マルチスレッド操作、表面的には操作効率が向上します
、IO の過剰な操作は深刻なパフォーマンスの冗長性につながります
* 1 つの部分のみを書き込みます一度に
- 改善
* プロデューサーコンシューマーモードを使用し、個別の操作を行い、スレッド数を制限します
* スタックキューを使用し、先入れ先出し、保証されたログシーケンスを使用します
* 単一インスタンスの IO 変数、書き込み操作バッチで
変換結果:
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);
            }
        }
    }
}
ログイン後にコピー
コードにはサードパーティ コンポーネントのアプリケーションが含まれていないため、このファイルをコピーして使用するだけです。
今のところ、ログ ファイルの占有、ソフトウェアの一時的なシャットダウン、キューのトリガー時間やバッチ書き込み数などの考慮事項など、いくつかの特殊な状況には対処していません。これは単なる基本的なデモです。
もちろん、後で改善する方法がわかっている場合は、プロジェクトの GitHub をフォローしてください。

もちろん、私はあなたのより良い提案を楽しみにしています、そしてあなたが良いアイデアを持っているがそれを自分で書きたくないなら、私はあなたがそれを実現するのを手伝います!

以上がWPF MaterialDesign サンプル オープン ソース プロジェクトの紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

オープンソースの無料画像注釈ツールおすすめ 15 選 オープンソースの無料画像注釈ツールおすすめ 15 選 Mar 28, 2024 pm 01:21 PM

画像の注釈は、ラベルまたは説明情報を画像に関連付けて、画像の内容に深い意味と説明を与えるプロセスです。このプロセスは機械学習にとって重要であり、画像内の個々の要素をより正確に識別するために視覚モデルをトレーニングするのに役立ちます。画像に注釈を追加することで、コンピュータは画像の背後にあるセマンティクスとコンテキストを理解できるため、画像の内容を理解して分析する能力が向上します。画像アノテーションは、コンピュータ ビジョン、自然言語処理、グラフ ビジョン モデルなどの多くの分野をカバーする幅広い用途があり、車両が道路上の障害物を識別するのを支援したり、障害物の検出を支援したりするなど、幅広い用途があります。医用画像認識による病気の診断。この記事では主に、より優れたオープンソースおよび無料の画像注釈ツールをいくつか推奨します。 1.マケセンス

オープンソースのフリーテキスト注釈ツールのおすすめ 10 選 オープンソースのフリーテキスト注釈ツールのおすすめ 10 選 Mar 26, 2024 pm 08:20 PM

テキスト注釈は、テキスト内の特定のコンテンツにラベルまたはタグを対応させる作業です。その主な目的は、特に人工知能の分野で、より深い分析と処理のためにテキストに追加情報を提供することです。テキスト注釈は、人工知能アプリケーションの教師あり機械学習タスクにとって非常に重要です。これは、自然言語テキスト情報をより正確に理解し、テキスト分類、感情分析、言語翻訳などのタスクのパフォーマンスを向上させるために AI モデルをトレーニングするために使用されます。テキスト アノテーションを通じて、AI モデルにテキスト内のエンティティを認識し、コンテキストを理解し、新しい同様のデータが出現したときに正確な予測を行うように教えることができます。この記事では主に、より優れたオープンソースのテキスト注釈ツールをいくつか推奨します。 1.LabelStudiohttps://github.com/Hu

AIはフェルマーの最終定理を克服できるか?数学者は100ページの証明をコードに変えるために5年間のキャリアを放棄した AIはフェルマーの最終定理を克服できるか?数学者は100ページの証明をコードに変えるために5年間のキャリアを放棄した Apr 09, 2024 pm 03:20 PM

フェルマーの最終定理、AIに征服されようとしている?そして、全体の中で最も意味のある部分は、AI が解決しようとしているフェルマーの最終定理は、まさに AI が役に立たないことを証明するものであるということです。かつて、数学は純粋な人間の知性の領域に属していましたが、現在、この領域は高度なアルゴリズムによって解読され、踏みにじられています。画像 フェルマーの最終定理は、何世紀にもわたって数学者を悩ませてきた「悪名高い」パズルです。それは 1993 年に証明され、現在数学者たちはコンピュータを使って証明を再現するという大きな計画を立てています。彼らは、このバージョンの証明に含まれる論理的エラーがコンピュータによってチェックできることを望んでいます。プロジェクトアドレス: https://github.com/riccardobrasca/flt

PyCharm を詳しく見る: プロジェクトを簡単に削除する方法 PyCharm を詳しく見る: プロジェクトを簡単に削除する方法 Feb 26, 2024 pm 04:21 PM

タイトル: PyCharm の詳細: プロジェクトを削除する効率的な方法 近年、Python は強力で柔軟なプログラミング言語として、ますます多くの開発者に支持されています。 Python プロジェクトの開発では、効率的な統合開発環境を選択することが重要です。 PyCharm は、強力な統合開発環境として、プロジェクト ディレクトリを迅速かつ効率的に削除するなど、多くの便利な機能とツールを Python 開発者に提供します。以下では、PyCharm での削除の使用方法に焦点を当てます。

PyCharm の実践的なヒント: プロジェクトを実行可能な EXE ファイルに変換する PyCharm の実践的なヒント: プロジェクトを実行可能な EXE ファイルに変換する Feb 23, 2024 am 09:33 AM

PyCharm は、豊富な開発ツールと環境構成を提供する強力な Python 統合開発環境であり、開発者がコードをより効率的に作成およびデバッグできるようにします。 Python プロジェクト開発に PyCharm を使用するプロセスでは、Python 環境がインストールされていないコンピューター上で実行できるように、プロジェクトを実行可能 EXE ファイルにパッケージ化する必要がある場合があります。この記事では、PyCharm を使用してプロジェクトを実行可能な EXE ファイルに変換する方法と、具体的なコード例を紹介します。頭

推奨: 優れた JS オープンソースの顔検出および認識プロジェクト 推奨: 優れた JS オープンソースの顔検出および認識プロジェクト Apr 03, 2024 am 11:55 AM

顔の検出および認識テクノロジーは、すでに比較的成熟しており、広く使用されているテクノロジーです。現在、最も広く使用されているインターネット アプリケーション言語は JS ですが、Web フロントエンドでの顔検出と認識の実装には、バックエンドの顔認識と比較して利点と欠点があります。利点としては、ネットワーク インタラクションの削減とリアルタイム認識により、ユーザーの待ち時間が大幅に短縮され、ユーザー エクスペリエンスが向上することが挙げられます。欠点としては、モデル サイズによって制限されるため、精度も制限されることが挙げられます。 js を使用して Web 上に顔検出を実装するにはどうすればよいですか? Web 上で顔認識を実装するには、JavaScript、HTML、CSS、WebRTC など、関連するプログラミング言語とテクノロジに精通している必要があります。同時に、関連するコンピューター ビジョンと人工知能テクノロジーを習得する必要もあります。 Web 側の設計により、次の点に注意してください。

リリースされたばかりの!ワンクリックでアニメ風の画像を生成するオープンソース モデル リリースされたばかりの!ワンクリックでアニメ風の画像を生成するオープンソース モデル Apr 08, 2024 pm 06:01 PM

最新の AIGC オープンソース プロジェクト、AnimagineXL3.1 をご紹介します。このプロジェクトは、アニメをテーマにしたテキストから画像へのモデルの最新版であり、より最適化された強力なアニメ画像生成エクスペリエンスをユーザーに提供することを目的としています。 AnimagineXL3.1 では、開発チームは、モデルのパフォーマンスと機能が新たな高みに達することを保証するために、いくつかの重要な側面の最適化に重点を置きました。まず、トレーニング データを拡張して、以前のバージョンのゲーム キャラクター データだけでなく、他の多くの有名なアニメ シリーズのデータ​​もトレーニング セットに含めました。この動きによりモデルの知識ベースが充実し、さまざまなアニメのスタイルやキャラクターをより完全に理解できるようになります。 AnimagineXL3.1 では、特別なタグと美学の新しいセットが導入されています

Alibaba 7B マルチモーダル文書理解の大規模モデルが新しい SOTA を獲得 Alibaba 7B マルチモーダル文書理解の大規模モデルが新しい SOTA を獲得 Apr 02, 2024 am 11:31 AM

マルチモーダル文書理解機能のための新しい SOTA!アリババの mPLUG チームは、最新のオープンソース作品 mPLUG-DocOwl1.5 をリリースしました。これは、高解像度の画像テキスト認識、一般的な文書構造の理解、指示の遵守、外部知識の導入という 4 つの主要な課題に対処するための一連のソリューションを提案しています。さっそく、その効果を見てみましょう。複雑な構造のグラフをワンクリックで認識しMarkdown形式に変換:さまざまなスタイルのグラフが利用可能:より詳細な文字認識や位置決めも簡単に対応:文書理解の詳しい説明も可能:ご存知「文書理解」 「」は現在、大規模な言語モデルの実装にとって重要なシナリオです。市場には文書の読み取りを支援する多くの製品が存在します。その中には、主にテキスト認識に OCR システムを使用し、テキスト処理に LLM と連携する製品もあります。

See all articles