FC2ブログ

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

「c#」外部クラスのprivateコンストラクタを実行

using System;

namespace Test {
static class MainClass {
static void Main() {
Console.WriteLine(TestObject.Instance.Obj.Name);
}
}

sealed class ConstructorUser {
public TestObject Obj;

//Func型を使うと
//外部クラスのprivateコンストラクタを実行できます
public ConstructorUser(Func creator) {
//TestObject型のコンストラクタを実行する
Obj = creator();
}
}

sealed class TestObject {
//privateコンストラクタを外部クラスから呼ばせる
public static ConstructorUser Instance = new ConstructorUser(Create);

//privateコンストラクタを呼ぶための関数
static TestObject Create() => new TestObject();

//privateコンストラクタ
TestObject() { }

public string Name => "Test Object Create Ok";
}
}
スポンサーサイト

並べ替えの時間計測に使用したコード

//並べ替えの時間計測に使用したコードです
using System;
using System.Linq;
using System.Diagnostics;
using System.Collections.Generic;

namespace Project1
{
static class Program
{
[STAThread]
static void Main()
{
Stopwatch sw = new Stopwatch();

const int length = 10000;

// trueならリストの計測
//falseなら配列の計測
if (true)
{
//リストを使用
var ary = new List();

for (var i = 0; i < length; i++)
{
ary.Add(length - i);
}

//時間の計測開始
sw.Start();

//バブルソートを使用
//Program.BubbleSort(ary);
//List.Sortを使用
Program.ListSort(ary);
}
else
{
//配列を使用
var ary = new int[length];

for (var i = 0; i < ary.Length; i++)
{
ary[i] = length - i;
}

//時間の計測開始
sw.Start();

//バブルソートを使用
//Program.BubbleSort(ary);
//Array.Sortを使用
Program.ArraySort(ary);
}

sw.Stop();
Console.WriteLine(sw.Elapsed);
}

//バブルソート(自前で実装)の場合
//
//要素数 100の時
//並べ替えに約 0.0005 秒
//
//要素数 1000の時
//並べ替えに約 0.027 秒
//
//要素数10000の時
//並べ替えに約 2.6 秒
static void BubbleSort(List ary)
{
for (var i = 0; i < ary.Count; i++)
{
for (var a = 0; a < ary.Count; a++)
{
var num = ary[i];

if (num < ary[a])
{
ary[i] = ary[a];
ary[a] = num;
}
}
}
}
//バブルソート(自前で実装)の場合
//
//要素数 100の時
//並べ替えに約 0.00026 秒
//
//要素数 1000の時
//並べ替えに約 0.01 秒
//
//要素数10000の時
//並べ替えに約 1.03 秒
static void BubbleSort(int[] ary)
{
for (var i = 0; i < ary.Length; i++)
{
for (var a = 0; a < ary.Length; a++)
{
var num = ary[i];

if (num < ary[a])
{
ary[i] = ary[a];
ary[a] = num;
}
}
}
}

//List.Sortを使う場合
//
//要素数 100の時
//並べ替えに約 0.0014 秒
//
//要素数 1000の時
//並べ替えに約 0.0015 秒
//
//要素数10000の時
//並べ替えに約 0.0034 秒
static void ListSort(List ary)
{
ary.Sort((a, s) =>
{
return a - s;
});
}
//Array.Sortを使う場合
//
//要素数 100の時
//並べ替えに約 0.002 秒
//
//要素数 1000の時
//並べ替えに約 0.0024 秒
//
//要素数10000の時
//並べ替えに約 0.005 秒
static void ArraySort(int[] ary)
{
Array.Sort(ary, (a, s) =>
{
return a - s;
});
}
}
}

c# 並べ替えにかかる時間(配列編)

並べ替えにかかる時間を計測してみた
(配列の型はint型です)

・バブルソート(自前で実装)の場合
要素数 100の時
並べ替えに約 0.00026 秒

要素数 1000の時
並べ替えに約 0.01 秒

要素数10000の時
並べ替えに約 1.03 秒

・Array.Sortを使う場合
要素数 100の時
並べ替えに約 0.002 秒

要素数 1000の時
並べ替えに約 0.0024 秒

要素数10000の時
並べ替えに約 0.005 秒

・結論
並べ替えは、Array.Sortを使うほうが早い

メモリ使用量を確認

using System;

namespace Project1
{
internal static class Program
{
private static void Main()
{
//GCクラスのGetTotalMemory関数は使用メモリを取得する関数
//引数はbool型で、trueならガベージコレクタを実行、falseなら実行しない
//
//戻り値はlong型
System.Console.WriteLine(GC.GetTotalMemory(false));

//ガベージコレクタを実行後のメモリ使用量を出力
System.Console.WriteLine(GC.GetTotalMemory(true));

}
}
}

アプリの実行

using System;
using System.Diagnostics;

namespace Project1
{
internal static class Program
{
private static void Main()
{
//実行するファイル名
const string fileName = "test.txt";
//ファイルを起動する際に指定する引数
//不要な場合は省略可能
const string arguments = "test";

//ファイル実行用インスタンスを生成
Process process = new Process();
//StartInfoプロパティで、
//ファイル実行に必要な情報を設定
ProcessStartInfo info = process.StartInfo;

//実行するファイル名を指定(必須)
info.FileName = fileName;

//ウィンドウを表示するか
//Normalで表示
//Hiddenで非表示
info.WindowStyle = ProcessWindowStyle.Normal;

//ファイル実行の際に指定する引数
//不要な場合は省略可能
info.Arguments = arguments;

//Exitedイベントを実行するか
//falseなら実行しない、trueなら実行する
process.EnableRaisingEvents = true;
//Exitedイベントは、アプリが終了した際に呼ばれる処理
//使用するには、EnableRaisingEventsプロパティにtrueを指定している必要がある
process.Exited += (sender, e) =>
{
Console.WriteLine("アプリが終了しました");
};

//ファイルの実行
process.Start();
}
}
}
プロフィール

みにおん

Author:みにおん
c#でゲームを作る人です
web小説なども書いています

低学歴で馬鹿なのパート従業員
ですが、よろしく

相互リンク・ブロとも募集中です
コメントなどご自由にどうぞ

ホームページを見る
Twitter(個人ページ)
PIXIV(個人ページ)

○自作ゲーム一覧
ふりーむ
フリーゲーム夢幻
100%ふりげストア

・web小説
最後の時の夢

最新記事
最新コメント
月別アーカイブ
カテゴリ
ブロとも一覧
検索フォーム
ブロとも申請フォーム

この人とブロともになる

RSSリンクの表示
リンク
アクセスランキング
QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。