質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Q&A

解決済

1回答

1210閲覧

CPU使用率と物理メモリ使用量、仮想メモリ使用量を1分毎に表示しサーバーの負荷率を履歴として取りたいと考えています。テキストファイルへの出力。

ShinyaKojima

総合スコア18

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

0グッド

0クリップ

投稿2019/04/10 06:55

編集2019/04/10 08:03

いつもお世話になっております。

コンソールの結果にCPU使用率、物理メモリ、仮想メモリ使用量を1分毎に表示して24時間の履歴を残したいと考えています。このプログラムをタスクスケジューラで1日1回決まった時間に動くようにして毎日の履歴としてファイルを残したいのですが、基本的なことかもしれませんがコンソールへの出力は確認できたので24時間分のコンソールの結果をテキストファイルなどに出力(ファイル名を処理を開始した日付.txt)したいのですがC#を勉強し始めて日が浅く検索して調べても分からないです。
C#に詳しい方、どうかご教授お願い致します。
また、コードに誤りがある場合やこういう風にすると良いなどある場合は、ご指摘、修正も宜しくお願い致します。

説明が長くなり分かりにくい部分があると思いますが、
実現したいこととしては
・コンソールの結果をテキストファイルに出力(ファイル名→処理を開始した日付.txt)
または処理しながらテキストファイルに追加することは可能なのか。
・コードの添削、修正のお願い
です。
宜しくお願い致します。

using System; using System.Threading; using System.Diagnostics; using System.IO; namespace CodeRecipe_Timer_CS { class Program { static void Main(string[] args) { using (PerformanceCounter pc = new PerformanceCounter("Processor", "% Processor Time", "_Total", true)) { TimerCallback tDelegate = new TimerCallback(GetCpuUsage); using (Timer oTimer = new Timer(tDelegate, pc, 0, 60000)) //1分毎に { Thread.Sleep(86400000);  //24時間後終了 } } Console.WriteLine("Timer を停止しました。終了するには何かキーを押してください。"); Console.Read(); } static void GetCpuUsage(object state) { PerformanceCounter pc = state as PerformanceCounter; DateTime dtNow = DateTime.Now; System.Diagnostics.Process p = System.Diagnostics.Process.GetCurrentProcess(); p.Refresh(); if (pc != null) { Console.WriteLine(String.Format("現在のCPU使用率は {0:f}% です。" + dtNow.ToString(), pc.NextValue())); Console.WriteLine("物理メモリ使用量: {0}", p.WorkingSet64); Console.WriteLine("仮想メモリ使用量: {0}", p.VirtualMemorySize64); } } } }

追記:コンソールの出力結果としては以下のように1分毎に表示されます。プログラム動かし始めは0%で問題ありません。このままテキストファイルに出力できると助かります。

現在のCPU使用率は 0.00% です。2019/04/10 15:58:22
物理メモリ使用量: 25051136
仮想メモリ使用量: 143544320
現在のCPU使用率は 62.10% です。2019/04/10 15:59:22
物理メモリ使用量: 25653248
仮想メモリ使用量: 143675392

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/04/10 07:59

タグにある情報はタイトルに含まなくて良いですよ。簡潔に要件だけ記載してください。
ShinyaKojima

2019/04/10 08:04

ご指摘ありがとうございます。まだまだ不慣れなところがあるため 長々と書くより簡潔に書いたほうが良いですね。 以後気を付けます。
guest

回答1

0

ベストアンサー

File.AppendAllTextメソッドを利用すれば楽かと思います。

投稿2019/04/10 07:58

YAmaGNZ

総合スコア10222

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ShinyaKojima

2019/04/10 08:11

このメソッドを使ってファイルを作成する場合、ファイル名に日付などを入れるのにはどのようにしたら出来るのでしょうか?
YAmaGNZ

2019/04/10 08:27

ファイル名は文字列での指定ですから、日付を文字列にするなりしてください。
ShinyaKojima

2019/04/10 08:43

すみません。質問が悪かったみたいです。タスクスケジューラで毎日プログラムを動かして処理が終了したらファイル名をその日の日付にしたいと考えています。なので毎日日付が追加された2019.4.9.txt 2019.4.10.txt 2019.4.11.txtのように毎日のファイルが増えるようにしたいのですが。 DateTime.Now + .txtのように出来ますか?またFile.AppendAllTextでファイルに書き込む内容File.AppendAllText(@"C:\検証用\検証データ\MLOG_RCV\ 〇〇〇〇.txt",■■■■ );の■の部分はどのように記述したらよいでしょうか?コンソールの出力結果をそのまま追加したいのですが・・・質問ばかりで申し訳ありません。
YAmaGNZ

2019/04/10 08:53

出力内容はコンソール出力と同じでしたら、同じものを書けばいいです。 日付に関しては、ToStringするなり、String.Format使うなりいろいろ方法がありますので、検索してみてください。 「C# 日付 文字列」とでも検索すればいろいろ出てきます。DateTime.NowなりDateTime.Todayなり使えばその日の日付が取得できますし。
ShinyaKojima

2019/04/11 00:37

using System; using System.Threading; using System.Diagnostics; using System.IO; namespace CodeRecipe_Timer_CS { class Program { static void Main(string[] args) { using (PerformanceCounter pc = new PerformanceCounter("Processor", "% Processor Time", "_Total", true)) { TimerCallback tDelegate = new TimerCallback(GetCpuUsage); using (Timer oTimer = new Timer(tDelegate, pc, 0, 60000)) { Thread.Sleep(734400000); } } Console.WriteLine("Timer を停止しました。終了するには何かキーを押してください。"); Console.Read(); } static void GetCpuUsage(object state) { string today = DateTime.Now.ToString("yyyyMMdd"); PerformanceCounter pc = state as PerformanceCounter; DateTime dtNow = DateTime.Now; System.Diagnostics.Process p = System.Diagnostics.Process.GetCurrentProcess(); p.Refresh(); if (pc != null) { //Console.WriteLine(String.Format("現在のCPU使用率は {0:f}% です。" + dtNow.ToString(), pc.NextValue())); //Console.WriteLine("物理メモリ使用量: {0}", p.WorkingSet64); //Console.WriteLine("仮想メモリ使用量: {0}", p.VirtualMemorySize64); File.AppendAllText(@"C:\検証用\検証データ\MLOG_RCV\" + today +".txt", String.Format("現在のCPU使用率は {0:f}% です。" + dtNow.ToString(), pc.NextValue()) + Environment.NewLine); File.AppendAllText(@"C:\検証用\検証データ\MLOG_RCV\" + today + ".txt", String.Format("物理メモリ使用量: {0}", p.WorkingSet64) + Environment.NewLine); File.AppendAllText(@"C:\検証用\検証データ\MLOG_RCV\" + today + ".txt", String.Format("仮想メモリ使用量: {0}", p.VirtualMemorySize64) + Environment.NewLine); } } } } ありがとうございました。 ファイル名も当日の日付に出来て中身もコンソール出力と同じ結果で表示することができました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問