若手育成の目的で、先月からペアプログラミングを始めました。
本来は常にペアプログラミングを行なうのが良いのでしょうか、まずは週に数回行ってみて様子を見ています。
それでも、余裕が無くてなかなか時間が取れていないです。
若手育成の目的で、先月からペアプログラミングを始めました。
本来は常にペアプログラミングを行なうのが良いのでしょうか、まずは週に数回行ってみて様子を見ています。
それでも、余裕が無くてなかなか時間が取れていないです。
弊社で開発している、ある案件のVisualStudioソリューションを開くのが異常に遅い問題があり、
てっきりプロジェクト数が100個くらいあるのでしかたがないと諦めていたのですが、
原因がわかり速くなりました。
問題は「Microsoft Visual Studio Installer Projects」で作成したインストーラプロジェクトでした。
インストーラプロジェクトを含んでいるとVisualStudioソリューションを開いていからマウス操作がまともに行えるようになるまで1分くらいかかっていたのですが、
インストーラプロジェクトを省くとマウス操作が数秒で行えるようになりました。
今は、ソリューションに空のダミーインストーラプロジェクトを含むようにし、インストーラを作成するときだけソリューションファイルを置換してダミーインストーラプロジェクトから本番インストーラプロジェクトに切り替えるようにしました。
もっと早くに気づけばよかった。
C#でファイルが開かれてロックされているかを取得したかったので.netを調べたが、どうも無いみたい。
無いものは自作。FileInfoクラスのIsLocked拡張メソッドを社内ライブラリに追加しました。
(どこかのサイトを参考に作成したのですが、どこか忘れてしまいました。)
使用頻度は少ないですが、なにかの役にはたつでしょう。
public static bool IsLocked(this FileInfo file) {
if (file == null) return false;
if (file.Exists.Not()) return false;
try {
using var _ = file.Open(FileMode.Open, FileAccess.ReadWrite, FileShare.None);
} catch {
return true;
}
return false;
}
iPhoneアプリの開発を今後行っていくため、初めてmacをさわりました。
今までほぼWindowsしか扱ってこなかったので、これまでの常識とは異なることが多く大変ですね。
どうにかこうにかテレワークで開発が行える所まで準備ができ、少しずつ慣れていっているところです。
新しいことを学ぶのは大変ではあるものの楽しくて良いです。
時間が無限にあれば良いのですが、そうは行かないのでまずは既存の開発を前倒しして、早いことiPhone開発を初めたいところです。
社内ライブラリを改造し、.net5などの.net core系で動作するようにしました。
社内ライブラリは.net frameworkで作成されています。
本来であれば.net coreに移行するのが良いのですが、それはなかなか大変です。
とりあえずは.net frameworkのままとして、.net coreプロジェクトで使用しても正しく動作するように改造を行いました。
今までの単体テストも全てパスしましたので、とりあえずはこれで当分なんとかはなるだろうと思います。
いずれは、.net coreへの完全移行も考えないと行けないですが、少なくとも長期サポート版の.net6が出てからですね。
今進めている案件で初めてPostgreSQLを使用しました。
いつもはSQLServerを使用することが多いので、下調べから始めましたがなんとか使用できるようになりました。
管理ソフトはHeidiSQLを使用しています。特に問題なしです。
C#のライブラリはEntityFramework6.Npgsqlを使用しています。EntityFrameworkはシンプルで良いですね。
思っていたより敷居が低くで良かった。
以前にPLINQ(Parallel LINQ)の実行速度を調査し、簡単にLINQを並列化して速度改善できることが分かりました。
しかし、PLINQを使用した場合、結果の要素順はどうなるのでしょう?
本来なら元の要素順に取り出したいのですが、並列化されているので順不同なのでしょうか?
調べてみた結果、PLINQを使用しても元の順番通りに要素が取得できました。すばらしい。
詳しくは調査していませんが、PLINQのメソッドの戻り値はParallelQuery型になっており、たぶんこのクラスか、これを継承したQueryOperatorクラスあたりでうまいこと取出し順序を調整しているのでしょう。
.netのPLINQ(Parallel LINQ)による並列実行の効果がどれほどなのか理解していなかったのでテストしました。
Select、Where、AverageをLINQとPLINQで実行し、速度を確認します。
var items = Enumerable.Range(1, 100_000_000).ToArray();
var sw1 = Stopwatch.StartNew();
var results1 = items.Select(x => Math.Pow(x, 0.5)).ToArray();
Debug.Print($"Select LINQ {sw1.Elapsed}");
var sw2 = Stopwatch.StartNew();
var results2 = items.AsParallel().Select(x => Math.Pow(x, 0.5)).ToArray();
Debug.Print($"Select PLINQ {sw2.Elapsed}");
var sw3 = Stopwatch.StartNew();
var results3 = items.Where(x => Math.Pow(x, 0.5) >= 100).ToArray();
Debug.Print($"Where LINQ {sw3.Elapsed}");
var sw4 = Stopwatch.StartNew();
var results4 = items.AsParallel().Where(x => Math.Pow(x, 0.5) >= 100).ToArray();
Debug.Print($"Where PLINQ {sw4.Elapsed}");
var sw5 = Stopwatch.StartNew();
var results5 = items.Average(x => Math.Pow(x, 0.5));
Debug.Print($"Average LINQ {sw5.Elapsed}");
var sw6 = Stopwatch.StartNew();
var results6 = items.AsParallel().Average(x => Math.Pow(x, 0.5));
Debug.Print($"Average PLINQ {sw6.Elapsed}");
結果
Select LINQ 00:00:04.9831283
Select PLINQ 00:00:01.1474103
Where LINQ 00:00:04.7858871
Where PLINQ 00:00:00.7447430
Average LINQ 00:00:03.8039131
Average PLINQ 00:00:00.3454058
今回のテストプログラムの場合、4倍~11倍の速度改善になっています。
.AsParallel()を追加するだけで、これだけの速度改善になるので、処理が遅くて困った場合にはまずPLINQを試すのが良さそうです。