22/02/09 23:13:39.45 1A90hyai0.net
!extend:checked:vvvvv:1000:512
次スレを立てる時は↑を2行冒頭に書くこと(1行分は消えて表示されない為)
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。
なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスや酔っぱらいレスはやめてください
>>980を踏んだ人は新スレを建てて下さい。>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。
■前スレ
ふらっと C#,C♯,C#(初心者用) Part153
スレリンク(tech板)
■関連スレ
C#, C♯, C#相談室 Part96
スレリンク(tech板)
■コードを貼る場合は↓を使いましょう。
URLリンク(ideone.com)
URLリンク(dotnetfiddle.net)
■情報源
URLリンク(docs.microsoft.com)
URLリンク(docs.microsoft.com)
URLリンク(docs.microsoft.com)
URLリンク(referencesource.microsoft.com)
URLリンク(source.dot.net)
・Insider.NET > .NET TIPS - @IT
URLリンク(www.atmarkit.co.jp)
・DOBON.NET .NET Tips
URLリンク(dobon.net)
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2:デフォルトの名無しさん
22/02/13 00:08:15.38 FGdWJXDS0.net
何でシャープなのにフラットなんですか?
3:デフォルトの名無しさん
22/02/13 03:05:32.20 VSC7OudY0.net
何でだと思いますか?
4:デフォルトの名無しさん
22/02/15 23:10:38.63 cOFK9ujT0.net
多次元配列とジャグ配列ってメモリ使用量は同じですか?
(例えばint[3,3]とint[3][3])
5:デフォルトの名無しさん
22/02/15 23:16:22.58 V26FO7wsa.net
>>4
意地悪な言い方をすれば、配列のメモリ使用量 = 要素数だと考えると
ジャグ配列の方が要素数が少ないのでメモリ使用量も小さいことになる。
6:デフォルトの名無しさん
22/02/16 00:42:55.65 zdbyhmola.net
c#の実装がどうなってるのかは知らないけど普通に考えて
多次元より配列の配列の方がメモリ効率悪くなるからメモリ使用量も多いはず
7:デフォルトの名無しさん
22/02/16 09:24:38.60 9PrGaEWW0.net
シャグ配列は配列の配列のためのヒープ+配列それぞれのヒープ、つまりint[3][3]だと4つのオブジェクトからなる
メモリ的にも連続してない上に4つのオブジェクトヘッダ分(32bitだと8byte?64bitだと16byte?)余計に要する
int[3,3]の多次元配列は実体はint[9]の1オブジェクトとしてレイアウトされてそうだけど実際どうなってるかはunsafeで確かめてみないと分からない
Console.WriteLine(Unsafe.AsPointer(ref array[0,0]));とかでアドレスを調べてみると良い
8:デフォルトの名無しさん
22/02/16 10:02:32.42 xaORQRwj0.net
小細工せずにシンプルに富豪的プログラミングすりゃええやん
9:デフォルトの名無しさん
22/02/16 10:20:29.58 FqYQ+dJNM.net
ソース忘れたけどジャグ配列の方がアクセス速いらしい
10:デフォルトの名無しさん
22/02/16 11:20:29.58 FqYQ+dJNM.net
すまん嘘ついたわ
シーケンシャルはジャグのが速いけど、ランダムだと逆らしい
普通に考えると >>7 の言うようにジャグは配列のヘッダ分余分に使うと思うけど、プリミティブ型の配列は最適化で何か消し飛びそうな気もするから、正直あんま変わらなさそうな気がする
11:デフォルトの名無しさん
22/02/16 14:03:09.07 RtFWZL7LM.net
全部詰め込むならジャグ配列のほうが容量は食う
多次元配列はint[M x N]で確保されて計算経由でアクセス
速度は環境や使い方によって違うので自分の使い方で計測したほうがいい
12:デフォルトの名無しさん
22/02/16 15:12:12.97 t9owAYRA0.net
もっと楽観的に取り組もうぜ
13:デフォルトの名無しさん
22/02/17 10:51:36.86 GVuWfQald.net
正直いって、メモリや速度より組みやすさで選びたいよね。
性能を求めるなら、Rustとかの方が良いんでしょ?
14:デフォルトの名無しさん
22/02/17 12:14:06.04 JwXvZXiU0.net
え?それ、実際に計測していってんの?
15:デフォルトの名無しさん
22/02/17 12:26:13.49 eZZ7a2UPM.net
後々の保守考えると、実際のとこ見やすさと組みやすさが最重要だと思う
16:デフォルトの名無しさん
22/02/21 21:06:11.37 8NF9kOJ70.net
VBAからのC ♯に挑戦中です。
visual studio使ってるんですが、予測変換やらその他諸々便利な事が多く感動しております。。
質問なんですが、VBAでやる場合は印刷=Excel sheetでみたいな固定概念なんですがこっちの場合って印刷出力は物によるとは思うんですが、どんな感じですか?調べると、print document??なるもので頭でイメージして印刷用のベースを自作して作るのですか?
印刷内容は至ってシンプルな文字列やら数値です。
17:デフォルトの名無しさん
22/02/21 21:40:50.41 dmBIFY6O0.net
そもそもプリンタから紙を出すということ自体発想がなかったわ
ライブラリ使うにしても
入力の文字列やら数値から印刷用のレイアウトを起こさなきゃいけないし、
プリンタに印刷データを投げなきゃいけない
簡単に印刷と言うけど結構やることは多い
18:デフォルトの名無しさん
22/02/21 21:44:55.46 i5JttRhRa.net
プリンタは画像描画みたいなもの
縦横ピクセルサイズ決めて、そこのxy座標どこにどのくらいの大きさで文字を描く~ってイメージ
印刷プレビューも使えるから適当にググって試せばすぐわかるよ
19:デフォルトの名無しさん
22/02/21 21:51:01.85 Gf4lGfIx0.net
>>16
イメージは1ページの白紙に自分でしこしこテキストとか図形を書く感じ
(数値は自分で文字列にして書く)
とりあえずこのあたりのサンプルをビルドしてみては?
URLリンク(docs.microsoft.com)
20:デフォルトの名無しさん
22/02/21 23:35:22.77 8NF9kOJ70.net
なるほど、やはりしこしこ描いてくんですね。やる事多そうですね。
勉強も兼ねてやってみます。
ありがとうございます!
21:デフォルトの名無しさん
22/02/22 10:46:16.00 vNlU0s1vM.net
会社で買えるならアクレポが楽だけどな
PDFでいいなら他の手もあるけど
22:デフォルトの名無しさん
22/02/22 10:54:46.02 Q9cfD2FD0.net
Crystal Reports for VSは未だに.Net Frameworkのみの対応なんだっけ?
23:デフォルトの名無しさん
22/02/23 06:06:54.77 8XUT1BDs0.net
そんなん使ってる環境で.net core対応かどうかとか気にするの?
24:デフォルトの名無しさん
22/02/23 10:26:26.53 EjF360bu0.net
現時点で .NET core に対応する必要あるの?
25:デフォルトの名無しさん
22/02/23 10:52:19.37 IFX4MVN+0.net
「現時点でES6に対応する必要あるの?」
って言ってたJavaScripterの末路を知らんのか
26:デフォルトの名無しさん
22/02/23 11:02:58.12 rcGZ+xyY0.net
対応する必要が出てきてから移行したよ
27:デフォルトの名無しさん
22/02/23 11:37:00.39 6huhQPG70.net
今から対応を考えるなら.NETの方にしとけ
28:デフォルトの名無しさん
22/02/23 11:53:14.46 pfP6MzJI0.net
未だに.NET Framework2.0が動き続けている俺社には耳が痛い
あと6年もサポート残っているんだからいい加減移行考えろよと
29:デフォルトの名無しさん
22/02/23 12:31:01.73 n4QLtIZ70.net
XPでも使ってるのか
現行のOSで2.0はかえって難しいだろ
30:デフォルトの名無しさん
22/02/23 13:00:38.62 a6rWCkrR0.net
WPFで帳票もいけるみたいだぞ
URLリンク(qiita.com)
31:デフォルトの名無しさん
22/02/23 13:46:28.74 mlk9UOBoa.net
今の.netと数年前の.net coreは別物になってる
それに引き換えframeworkは変化が少ない。c++のmfcみたいに細々と生きて切り捨てられることもないだろ
どっちが保守楽かって考えたら・・・
32:デフォルトの名無しさん
22/02/23 14:00:40.20 a6rWCkrR0.net
規模がでかい社内システムだと、中々移行に踏み切るのも難しい場合はあるな
部分部分で少しづつ置き換えられるならいいんだが、色々連動してたりすると下手に手が出せん
33:デフォルトの名無しさん
22/02/23 14:44:30.90 EjF360bu0.net
.NET6への移行(移植)はライブラリの対応待ちだな
34:デフォルトの名無しさん
22/02/26 20:05:44.30 UUNvHcAJ0.net
いやWindows標準搭載待ちだろ
.NET6ですら標準化予定なしって聞いてからはC#自体書く気なくなったわ
35:デフォルトの名無しさん
22/02/26 20:41:04.47 e5W/1zqv0.net
COMコンポーネントが作れなくなってるので移行しづらい
36:デフォルトの名無しさん
22/02/27 10:04:44.98 VN1UC9sN0.net
>>34
まずそれな
37:デフォルトの名無しさん
22/02/27 10:20:11.38 FLYW632f0.net
>>35
まだ作る事ってある?
使うのは偶に必要になるけど
38:デフォルトの名無しさん
22/02/27 17:20:47.20 hLXeworC0.net
WinFormsのTextBoxでKeyPressイベントが発生した時、キャレットの位置が行頭なのかどうかを判定したいのですが、
if(TextBox1.Text[TextBox1.SelectionStart].ToString() == Environment.NewLine)
では判定出来ないようです。
判定する方法を教えてください。
39:デフォルトの名無しさん
22/02/27 17:33:25.94 6fl1teDTa.net
[TextBox1.SelectionStart]だと行頭だから
[TextBox1.SelectionStart-1]になるんじゃない?
40:デフォルトの名無しさん
22/02/27 17:59:32.72 hLXeworC0.net
>>39
ダメでした・・・。
41:デフォルトの名無しさん
22/02/27 18:07:12.14 6fl1teDTa.net
一文字しかとってないからNewlineじゃなくて"\n"かな
42:デフォルトの名無しさん
22/02/27 19:11:31.38 ZUZKwXZL0.net
DOBONみたいに地道にやったほうがよくね?
URLリンク(dobon.net)
43:デフォルトの名無しさん
22/02/28 09:21:55.74 +yCudJYj0.net
下記のOBJListの並びを「I,N,P,P」から「P,P,I,N」のようにPが先頭に来るよう入れ替えしたく。
OBJListの要素をforeachで回してPを見つけたら先頭に移動する等試したのですが、
処理中にOBJListの順番を変えるなと怒られてしまいました。どのようにすれば実現できるでしょうか?
よろしくお願いします。
class OBJ
{
public string Name { get; set; }
public int No { get; set; }
}
private void narabekae()
{
List<OBJ> OBJList = new List<OBJ>();
OBJList.Add(new OBJ { Name = "I", No = 1 });
OBJList.Add(new OBJ { Name = "N", No = 1 });
OBJList.Add(new OBJ { Name = "P", No = 1 });
OBJList.Add(new OBJ { Name = "P", No = 2 });
}
44:デフォルトの名無しさん
22/02/28 09:39:44.52 +7QZaSxQd.net
OBJListを使いまわさずに新規のListを作る
Enumerable.OrderByとか
45:デフォルトの名無しさん
22/02/28 13:06:35.56 UX0HcLa3a.net
そういうのはforで後ろから回して、削除、挿入
46:デフォルトの名無しさん
22/02/28 17:42:35.91 XSUMuMfaM.net
>>43
そもそもがなんで順番変えるな!って怒られるかわかる?
分かったら対応もわかるはず
47:デフォルトの名無しさん
22/02/28 19:07:11.88 Dbx5MQPW0.net
>>46
foreach中に順番変えられたらforeachが成り立たないのだろうなとは思いました。
頂いたアドバイスからPを別のリストに移動してドッキングしても
邪道では無さそうなので、そうしようと考えています。
48:デフォルトの名無しさん
22/03/01 11:27:38.32 Dq7cA1DN0.net
それだけのために一時バッファとしてもう一個リスト作るのはスマートじゃない
Remove&先頭挿入をペアで行う場合は後方の順番は狂わないので原始的にforで回せばいい
for (int i = 0, end = obj_list.Count; i < end; ++i) {
var obj = obj_list[i];
if (obj.Name != "P") continue;
obj_list.RemoveAt(i);
obj_list.Insert(0, obj);
}
49:デフォルトの名無しさん
22/03/01 11:38:43.21 Dq7cA1DN0.net
>>48
そういえばint i = 1からでよかったな
50:デフォルトの名無しさん
22/03/01 12:59:14.06 haFp+aqn0.net
>>48
RemoveAtもInsertもO(n)だから
そのやり方なら新規にリストを作るほういいんじゃない?
51:デフォルトの名無しさん
22/03/01 13:00:38.80 qybIiuxnd.net
>>45が自分もいいきがするけど何も考えずにやると移動したPのデータの順番がおかしくなりそうにも思えたから
自分はPの移動用のリストを用意してもとのリストを後ろから参照して最後にもとのリストに挿入がいいかなと思った
52:デフォルトの名無しさん
22/03/01 13:03:47.38 RNWoyucIM.net
List.Sort が出てこないけどなんか欠点でもあるの?
53:デフォルトの名無しさん
22/03/01 13:14:03.84 FuAp7249a.net
新しくリストを作るって以上に処理が多くなる
54:デフォルトの名無しさん
22/03/01 13:31:44.32 Dq7cA1DN0.net
>>50
要素数がめちゃくちゃ多い場合はそうだな
RemoveAtで発生する後方要素の前方詰めが今回は完全に不要だから一回分多く無駄な処理が挟まってるからな
.NET5以上ならCollectionsMarshal.AsSpanを利用して
obj_span.Slice(0, i).CopyTo(obj_span.Slice(1, i));
obj_span[0] = obj;
とかに変えればO(n)処理は1回だけで済むからどんなパターンでも新規List作成より早く済むと思うが
55:デフォルトの名無しさん
22/03/01 13:50:15.40 FuAp7249a.net
要素が少ないときは新しくリスト作る方がremove/insertよりも数倍速い
ただ新しくリスト作るのはメモリを倍食うから、要素数が多くなったら(物理メモリよりも多くなったら)どうだか
56:デフォルトの名無しさん
22/03/01 14:23:11.54 V9EqT+vw0.net
つかそもそも、並べ替えたListそのものを保存する必要があるのかとか
初めから必要な順番で保存できないかとか考えたほうが良い気がする
57:デフォルトの名無しさん
22/03/01 14:28:49.61 qybIiuxnd.net
そもそもでいえば並べ替えのAdd時点でPを前に入れたいってわかっていれば
それなりの実装もあるんじゃねと思ったりしているから
質問の内容だけだとやりかたなんて色々あるよね
58:デフォルトの名無しさん
22/03/01 18:06:27.21 fDW5QBJr0.net
糞みたいな方法しか出てきてないけど普通に考えると
1) 元のリストからPを抜き出しつつ、Pだけ抜き出したリストを作る
2) Pだけのリストの後ろに元のリストをマージする
あとはList<>で気の利いた方法がないか調べる
59:デフォルトの名無しさん
22/03/01 18:38:32.31 SjVwjYfg0.net
>>58
ここまでで一番糞なのは案件満たしてないあんたやんけ
それだと「I,N,P,P」から「P,P,I,N,P,P」になってまうでw
60:デフォルトの名無しさん
22/03/01 18:55:33.25 xQ0S3wJN0.net
>>55
元のリストの中身(OBJクラスのインスタンス)をコピーせずに新しいリストで使いまわせば
メモリー消費の一時的な増加はあまり気にしなくて良い場合が多いんじゃないかな
61:デフォルトの名無しさん
22/03/01 19:17:57.35 fDW5QBJr0.net
めんどくせえやっちゃこれでいいだろ
OBJList.Sort((a,b) => (a.Name != b.Name) ? (a.Name != "P") ? (b.Name != "P") ? 0 : 1 : -1 : 0);
62:デフォルトの名無しさん
22/03/01 20:17:38.37 lFABJG9JM.net
>>61
これは初心者には呪文にしか見えないだろw
63:デフォルトの名無しさん
22/03/01 20:18:29.71 lFABJG9JM.net
訂正
誰にも呪文にしか見えない
64:デフォルトの名無しさん
22/03/01 20:58:33.05 pQFC2fuH0.net
これでプルリク出されたらレビュイー殺してしまうかもしれん
65:デフォルトの名無しさん
22/03/01 20:59:34.53 fDW5QBJr0.net
そういやListのソートは不安定だからNoをインデックスに見立てれば安定ソート
OBJList.Sort((a,b) => (a.Name != b.Name) ? (a.Name != "P") ? (b.Name != "P") ? (a.No - b.No) : 1 : -1 : (a.No - b.No));
LINQのOrderByは元から安定ソート
OBJList = OBJList.OrderBy(a => a.Name != "P").ToList();
66:デフォルトの名無しさん
22/03/01 21:09:10.33 gr6OEBT80.net
var weight = new Dictionary() { { "P", 1 }, { "I", 2 }, { "N", 3 } };
var result = OBJList.OrderBy( a => weight[ a.Name ] ).ToList();
の方が好み。エラーチェックは無視。
67:デフォルトの名無しさん
22/03/01 22:16:34.56 FpudFrD40.net
>>66
それ NIPP ⇒ PPIN になるんじゃね?
68:デフォルトの名無しさん
22/03/01 22:17:08.92 BpvMrVad0.net
ワンループで
P用参照リストと
それ以外参照リスト作って
最後にP用を前にしてドッキング
69:デフォルトの名無しさん
22/03/01 22:42:39.70 kklKOfnn0.net
datagridviewの垂直スクロールバーについて教えてください。
datagridviewを作成した後、
DataGridViewRow[] list = new DataGridViewRow[50];
(listの中身作成)
dataGridView1.Rows.AddRange(list);
のようにしてdataGridView1にデータを表示させようとすると縦スクロールバーが上手く表示されずフリーズ状態になってしまいます。
dataGridViewを作成した後に縦スクロールバーが出るまでdataGridView1.Rows.Addを繰り返して縦スクロールバーを出した後に
上記を実行した場合は問題なく表示されます。
縦スクロールバーを出すために無意味なデータをdataGridViewに表示させるといった不必要な処理を行いたくないのですが、
データを投入しなくても縦スクロールバーを出す方法、あるいは
dataGridView1.Rows.AddRange(list);
を実行してもフリーズしない方法はありますでしょうか?
70:デフォルトの名無しさん
22/03/01 22:53:13.83 i/a33NyP0.net
とりあえず片っ端からやってみたら
URLリンク(www.google.co.jp)
71:デフォルトの名無しさん
22/03/01 23:36:39.38 kklKOfnn0.net
ありがとうございます!
これでできました!
【C#】DataGridViewで編集不可やスクロールバーを常に表示する | NOARTS
URLリンク(noarts.net)
72:デフォルトの名無しさん
22/03/01 23:50:02.54 gr6OEBT80.net
>>67
あくまでやり方の一例。
問題があるなら自分で何とかしてくれ。
73:デフォルトの名無しさん
22/03/02 00:28:20.93 MSZ3LlYF0.net
AsSpan使ったらどうなるか興味あったからベンチしてみたら
1000件くらいだと一番高速だけど結局O(n^2)なので1~2万件でList<T>.Sortとかと逆転した
1万件程度なら余程最適化したい場合を除いてどれを選んでも性能的には問題なさそう
1. List<T>.Sort
2. Enumerable<T>.OrderBy
3. AsSpan + For Loop
4. RemoveAt + Insert + For Loop
5. Partition + Concat
74:デフォルトの名無しさん
22/03/02 00:34:33.47 MSZ3LlYF0.net
ところで
Span<T>もしくはIEnumerable<T>のどちらかを受け取るジェネリックな関数って定義できる?
75:デフォルトの名無しさん
22/03/02 01:42:56.13 O26kNIml0.net
そりゃ出来るやろ
LINQがおもっくそそれだし
76:デフォルトの名無しさん
22/03/02 05:50:05.45 +cCq037X0.net
>>72
いや、おかしいやり方示されても…
77:デフォルトの名無しさん
22/03/02 07:20:58.81 +1hBA4Bw0.net
PとP以外でフィルタしたリストをくっつけるのが判りやすいんかなあ
var PList = OBJList.FindAll(a => a.Name == "P");
var NPList = OBJList.FindAll(a => a.Name != "P");
PList.AddRange(NPList);
OBJList = PList;
78:デフォルトの名無しさん
22/03/02 08:32:07.28 Xi4FA93Ld.net
>>43 を読む限りの要件は
1. 比較の方法は「Name=="P"」だけで判断する
2. 安定ソートであること
3. 結果の返し方は(元のListを上書き変更/新規Listを作ってreturn)→質問者が何も考えてなさそうなので不明
質問者が現れて要件が確定しないとこれ以上進まんでしょ
79:デフォルトの名無しさん
22/03/02 09:19:13.48 +cCq037X0.net
>>78
> 3. 結果の返し方は(元のListを上書き変更/新規Listを作ってreturn)→質問者が何も考えてなさそうなので不明
元のListの上書きでしょ
それやろうとしてエラーになってるんだし
本当に必要な要件だったかどうかはわからんが
80:デフォルトの名無しさん
22/03/02 10:03:13.08 tBhSxL7sM.net
変にコレクション弄りまわさずに、Comparer<T>.CreateでカスタムComparer作ってSortかOrderByに食わせろ
81:デフォルトの名無しさん
22/03/02 10:20:09.79 6DUGQdfA0.net
>>76
あれに「P を先頭に持ってくる以外は元の順位を保持する」手順を追加すればいいだけだろうに。
宿題じゃないんだからそこまでは書かんよ。
82:デフォルトの名無しさん
22/03/02 10:21:00.91 KGds3ROy0.net
sort系持ち出してる人多いけど、P以外の順序は変えないってことは実現できるのか?
83:デフォルトの名無しさん
22/03/02 10:39:16.12 +cCq037X0.net
>>81
すでにいくつか正解出てるんだから無能のおかしいやり方なんて要らんよw
84:デフォルトの名無しさん
22/03/02 11:42:18.09 ZYz3XeEgH.net
>>47
あなたの書いた文が成り立たなくなるとか、そう言う理由でエラーが起きているわけではありません
独自解釈で理解した気分になってしまうと、何年続けても高卒・専門卒級プログラマーの域を出ません
エラーのメッセージが何で、なぜ今回の件に関係があるのか、しっかり突き詰めていかないと・・・・
85:デフォルトの名無しさん
22/03/02 18:12:53.89 O26kNIml0.net
小難しく考えずにこれでいいだろ
OBJList = OBJList.Where(x => x.Name == "P")
.Concat(OBJList.Where(x => x.Name != "P"))
.ToList();
86:デフォルトの名無しさん
22/03/02 22:35:58.10 nWwg4aeaM.net
なんだかもうネタスレ見たいな感じだな
87:デフォルトの名無しさん
22/03/03 00:25:46.12 dxyVfE5f0.net
大喜利かな?
88:デフォルトの名無しさん
22/03/03 08:59:19.53 o+Rr4hsu0.net
つまんねー大喜利だな
どこぞの黄色が並んでるみたい
89:デフォルトの名無しさん
22/03/03 09:21:31.01 jSBR5AQpd.net
初心者用スレなんだからわかる人から見れば大喜利に見えるでしょ
つまらないこといいなさんな
90:デフォルトの名無しさん
22/03/03 17:21:59.36 AMDtBRAN0.net
>>78,82
もとの要件がちゃんと示されてないから、
安定ソートが必要かどうかは微妙だと思うぞ
P,I,Nの順にソートされるようにすればいいだけじゃないのか
まあ俺ならソート用に順位表すような何かを別途作るがな
91:デフォルトの名無しさん
22/03/03 17:31:12.89 QcxixHpuM.net
わざわざunstableな方法を選ぶメリットあるの?
92:デフォルトの名無しさん
22/03/03 18:02:58.80 AMDtBRAN0.net
>>91
List<T>.Sort が不安定ソートだからな
OBJクラスにIComparable<OBJ>実装しとけば、OBJList.Sortだけで完了する
パフォーマンスとかまあいろいろあるけど、設計としてはそれが正しい気がする
93:デフォルトの名無しさん
22/03/03 18:17:27.98 QKnbgpbEM.net
>>92
今回のはOBJクラスに直接実装するIComparableとは別に比較関数用意したほうがいいでしょ
それに比較関数書くよりも簡単に書けてパフォーマンスもいいstableなやり方がすでにいくつか上がってる
94:デフォルトの名無しさん
22/03/03 18:35:14.37 harl8Fl70.net
もうこの流れ見て質問者逃げてるだろ
95:デフォルトの名無しさん
22/03/03 18:55:04.85 uKQKiz/ua.net
質問者なんてお題提供の存在でしかないからな
質問者放置はいつものことだろw
96:デフォルトの名無しさん
22/03/03 19:02:52.70 FQovZrSRM.net
たかがソートで満身創痍で質問者もびっくりしてると思う
97:デフォルトの名無しさん
22/03/03 19:12:44.11 bgg8zGG60.net
>>94
逃げてると言うかそれなりに答え出てるからもう見てないかもね
98:デフォルトの名無しさん
22/03/03 19:44:36.41 o+Rr4hsu0.net
そういや質問者そっちのけでバトるのもお得意だったよな
99:デフォルトの名無しさん
22/03/03 20:37:55.07 NDgh0LAU0.net
ID真っ赤にしてマウント取りに行くのは見物だよね
100:デフォルトの名無しさん
22/03/04 09:38:06.30 TJSFQkSB0.net
>>98
このスレのいいところの一つ
101:デフォルトの名無しさん
22/03/04 18:47:08.78 N5q/Azrd0.net
自称世界最速のソートアルゴリズムを作ってた奴もこのスレだっけ?
102:デフォルトの名無しさん
22/03/05 14:00:23.89 U93o6YuQ0.net
どちらかというとアリゴリズムというよりは自然なソート?というのでよく悩むよね
具体的には1,10,11,2,3,4,5,6,7,8,9となってしまうのを
1,2,3,4,5,6,7,8,9,10,11としたい(実際には数字だけではなくアルファベットなどが混入する)
103:デフォルトの名無しさん
22/03/05 16:19:30.03 E2o+9AFP0.net
文字列を数値扱いで比較するのが闇だからなぁ
正の整数しかないならできんこともないけど
マイナスを考慮するか?
"x=-3" < "x=-2"
"x=+3" > "x=+2"
小数扱いをするか?
"ver3.2" > "ver3.14"
"ver3.2.x" > "ver3.14.x" //これでいいのか?
"ver3.2.1" > "ver3.14.1" //これでいいのか?
"verx.2.1" < "verx.14.1" //これでいいのか?
"p3_2" < "p3_14" //小数扱いはしない
結構のところ数値考慮の比較は複数パターン用意してオプションで切り替えなきゃいけない
どこを数値扱いするかの仕様もどっかに書いとかないといけない
正の整数だけ考慮した比較と辞書順の比較の切り替えすら考え出すと辛いから
結局辞書順しかサポートしたくない
104:デフォルトの名無しさん
22/03/05 16:30:49.93 Tp7uE+H9M.net
>>102
それがまさにアルゴリズムじゃないかw
105:デフォルトの名無しさん
22/03/05 16:32:28.28 JM4So5Oz0.net
>>103
バージョンは正の数値以外含まれないものとしてSystem.Versionクラスを使えば
機械処理したいならこのクラスで扱える仕様にしておくのが無難だ
106:デフォルトの名無しさん
22/03/05 16:53:10.76 GzcJYiRD0.net
お絵描きソフトを作りたいのですがそういうグラフィック系についての参考書みたいなのって知ってますか?
あと初心者はこれ読めって本あれば教えて下さい
107:デフォルトの名無しさん
22/03/05 16:53:30.21 GzcJYiRD0.net
趣味でやろうとしてます
108:デフォルトの名無しさん
22/03/05 20:32:50.80 6VIYcmrkM.net
趣味って言ってもレベルが色々あるだろ
簡単なのは誰にでもほぼ作れる
画面でマウス押したらそこに色を置くだけ
ガチのやつは無理
109:デフォルトの名無しさん
22/03/05 23:42:53.60 GzcJYiRD0.net
>>108
それ系の参考書みたいなのがあれば嬉しい
110:デフォルトの名無しさん
22/03/05 23:47:24.10 vWLa1NTXM.net
WinFormsでよければ
URLリンク(dobon.net)
をひととおり試せばお絵かきソフトに必要な操作はだいたい分かるんじゃないかな
111:デフォルトの名無しさん
22/03/06 06:30:48.18 +GCt4WVZ0.net
>>110
ありがとうございます
112:デフォルトの名無しさん
22/03/06 07:16:01.38 YSSWJmRp0.net
>>111
横からレスだけど、ちなみに(知ってるかもしれないが)ライセンスに注意
特にコードをそっくりそのまま使うとか
ライセンスに無頓着なひとが多いので
113:デフォルトの名無しさん
22/03/06 10:17:17.43 Gsk/wVZB0.net
>>112
初心者が気にすることではない(笑)
114:デフォルトの名無しさん
22/03/06 10:28:10.00 FhlzQ0Dn0.net
>>112
dobon の話なら MIT License だろ
趣味の範疇で問題になることなんてあるのか?
115:デフォルトの名無しさん
22/03/06 10:42:12.60 20PzKiJp0.net
自分にできないことを他の人ができるようになってしまうのは悔しくて
答えに辿り着けそうなものを提供されると横やり入れて邪魔して
足を引っ張ろうとする地縛霊の糞みたいなのがここには居るんだよ
116:デフォルトの名無しさん
22/03/06 13:03:07.90 gZNSkpBT0.net
>>114
MITライセンスなら著作権表示が必要だな
趣味でも出来上がったものを公開する場合は注意
117:デフォルトの名無しさん
22/03/06 13:37:26.55 YSSWJmRp0.net
>>115
別にそんな気はないんだが…
趣味程度で自分の範囲で使うなら勝手にすればいい
違法行為じゃないから
でもライセンスを守ろうとすらしないやつは自分勝手なのが多い
仕事じゃなくて学校の課題だから自分ではやらずに他人に押し付けるとか、「あくまで非推奨であって法的拘束力がないから」ということでやりたい放題するとか
単に知らなかっただけならともかく自己中な考えのやつが大杉だから書いただけ
118:デフォルトの名無しさん
22/03/06 13:39:17.39 YSSWJmRp0.net
>>117の追伸 もちろんライセンスとかは守ろうとするけど意識してなかったとかも有り得るけどね
120:デフォルトの名無しさん
22/03/06 14:02:37.57 gemqlKpJ0.net
>>116
dobonのコードをそのままコピペするわけじゃないからな
コードそのものじゃなくアルゴリズム自体が著作権法の保護対象になるような創作的なものはdobonにはほぼないと言っていい
121:デフォルトの名無しさん
22/03/06 14:21:53.65 ePzsPMXHa.net
Q「○○したいです。どうしたらいいの?」
A「ライセンスがー、ライセンスガー」
なんだこれw
122:デフォルトの名無しさん
22/03/06 14:23:47.60 Gsk/wVZB0.net
>>117
恥の上塗り乙
123:デフォルトの名無しさん
22/03/06 15:29:34.08 iwH3kjY/0.net
>>119
すみだけど
著作権が保護するの記述されたものなのでコード自体は保護できるけど、アイデアは
保護しないはずなのでアルゴリズムは著作権の保護対象じゃないんでまいか?
アルゴリズムを保護するなら特許権のはずなので、コードのマルコピはNGだけど、
やってることをマネするのは問題なかったはず
アイデアが著作権で保護されちゃうと、誰も異世界転生出来なくなっちゃうよねぇ?w
124:デフォルトの名無しさん
22/03/06 16:22:36.60 gemqlKpJ0.net
>>122
広く「やり方/実装方法」という意味だったんだけどアルゴリズムって書いたのがよくなかったね
著作権法の保護対象はアルゴリズムを表現したコードになるんだけど
そのコードの丸コピじゃなくても表現として創作性が認められる部分をコピーしてれば問題になる
小説とプログラムだと保護される度合いが小説のほうが高いんだけど基本は同じ
異世界転生というアイデアの表現として創作性が認められる部分をコピーしてれば著作権侵害になりうるよ
125:デフォルトの名無しさん
22/03/06 16:43:39.86 jkekLrS80.net
まためんどくさい話が始まった・・・
126:デフォルトの名無しさん
22/03/06 16:48:29.60 Gsk/wVZB0.net
普通にNG
127:デフォルトの名無しさん
22/03/06 18:47:49.53 FhlzQ0Dn0.net
ライセンスガー君引っ込みつかなくなってて笑う
128:デフォルトの名無しさん
22/03/06 19:06:10.11 5Ls8hWzS0.net
やめたれw
129:デフォルトの名無しさん
22/03/06 19:15:30.08 aN6u98gQM.net
お前らのせいでスレがぎすぎすするからやめれ
130:デフォルトの名無しさん
22/03/06 19:56:18.29 GpPJTCKS0.net
ライセンス対策なんて怒られてからでいいんだよ
じゃんじゃんパクって日本のIT産業を明るくしてくれ
131:デフォルトの名無しさん
22/03/07 10:33:21.04 /M6r3uSU0.net
ここライセンススレだったかw
132:デフォルトの名無しさん
22/03/07 14:15:42.70 4Ht3Uzhs0.net
面倒くさい話してないと息の根が止まっちゃう難病でも患ってんのやろな
133:デフォルトの名無しさん
22/03/07 15:50:14.81 KExIaeukp.net
非常のライセンス、観てました
134:デフォルトの名無しさん
22/03/07 19:20:55.93 CiLOZxiFM.net
子作りライセンス
見ました
135:デフォルトの名無しさん
22/03/09 01:28:54.95 nnxUiPIy0.net
木曜日のリカが一言(AA略)
136:デフォルトの名無しさん
22/03/11 00:50:56.41 wMMa1InP0.net
Xamarinサポート終了らしいですけどc#でのスマホアプリ開発のFWって今何なんですか?
137:デフォルトの名無しさん
22/03/11 00:57:23.97 /TmTkpxda.net
xamarinはmauiに統合されただけだよ
純正と言っていいのか分からないけど純正のはmaui
138:デフォルトの名無しさん
22/03/11 00:57:43.51 KBALhfIjd.net
ないよ
MAUIが移行先になる予定だけどポシャる可能性も十分考えられる
139:デフォルトの名無しさん
22/03/11 01:04:38.32 Sh2rSROO0.net
何もかも一つ残らず失敗するMS
140:デフォルトの名無しさん
22/03/11 08:10:20.54 e7+o7NKc0.net
UIフレームワーク乱立させて何がしたいのかよく判らんね
良さげな技術のやつもあるけど、WPF以降に出た奴はどれも乗り換え先には不安
141:デフォルトの名無しさん
22/03/11 20:41:00.28 u82a29l50.net
学ぶにはコミュニティにお布施しないといけないからなぁ
しかも姫プを始める女が居ると技術系のガチ勢が愛想つかして出ていくから益々過疎化するという
142:デフォルトの名無しさん
22/03/11 20:44:05.02 bj9xq9MP0.net
Linux、iOS、Androidまで対応させる…
デスクトップとスマホのUIを統合させたときのバカさ加減に似てますな。
143:デフォルトの名無しさん
22/03/11 20:52:37.52 H3//uyOGa.net
スマホとPCを同じUIにするってならバカだけど
xamlで言語切り替えるのと同じ感覚でマルチプラットフォームにできるというのは大きいよ
144:デフォルトの名無しさん
22/03/12 08:55:55.47 dl+G0hLg0.net
趣味の延長で小さな会社で一人で業務アプリちまちま作ってるんですが相談させて下さい
VS2019+FrameWorks4.8で帳票とかサードパーティ製入れながらWinFormsで、Linux+MySQLでそれなりの規模に膨れて使ってます
端末の選択肢がWindows機でタッチありで5万で抑えて増やしてましたが、コストの割りに性能低すぎ故障多くてipadとかchromebook、Androidとか�
145:フ選択肢に切り替えようかと デスクトップアプリから脱却となると、NET5とかNET6への鞍替えがいるかなと思うのですが、関連書籍もまだあまりでおらず 実際、VS2022いれてNET5かNET6どちらに進むべきですかね ActiveReportsはNET5は対応していないし、他のサードパティは逆にNET5はOKでNET6はまだだったりですし、WindowsServerもたてれるようにならなきゃかなと思うと、本業片手間でやっているので学習コストも際限なくとはできないですし、稼働しているMySQLのデータは活かしたいところだしで・・何がいいのかわけわからなくなってきて 識者のご意見お伺いしたいです
146:デフォルトの名無しさん
22/03/12 10:39:20.39 LonchplXd.net
>>143
SaaSに切り替えりゃいいよ
147:デフォルトの名無しさん
22/03/12 10:48:32.30 B+2fu+fka.net
.net5はサポート期間が終わったか終わるかそのくらいの時期だよ
そういうのを真面目に考えるなら.net5はアウト(そういうの気しないなら5でもいい)
新規ではなく、winformからAndroidなどへ移行させるのは面倒だよ
どのくらいwindows依存コードがあるのかにもよるけど。
端末価格(性能に対する価格)はどんどん落ちてくから、俺だったらなんとか耐えつつwindows/FrameWorks4.8でやってくかな
148:デフォルトの名無しさん
22/03/12 11:03:57.18 dl+G0hLg0.net
>144
現状現場独自の機能が山ほどあるのでいまからSaaSというのは厳しいです
予算的にも・・・
>>145
となるとnet6をBlazorでちょっとずつ作り直していくてのが現実できですかね
(phpはかじってますが、JavaScriptはできない)
ブラウザベースに移行すればipadでもAndroidでもchromebookでもいけそうですし
ActiveReportsは大丈夫だし、それ以外のサードパーティ製は対応してくるのを待つとして
ネックは現在のサーバをWindowsServerに鞍替えするってことくらいでしょうか
CentOSは何年も触ってますが、Win鯖って扱えるようになるまでの労力って大きいですかね
セキュリティ含めてまでの学習となると相当苦労しそうですが・・・
149:デフォルトの名無しさん
22/03/12 11:23:02.57 T121kO+WM.net
>いまからSaaSというのは厳しいです
と思いたいんだろ?
費用なんかお前一人が無駄な努力でドブに捨ててる人件費よりよっぽど安いよ
150:デフォルトの名無しさん
22/03/12 11:30:22.00 JvvNjppkM.net
なんでWindows Serverが出てくるんだろう…
151:デフォルトの名無しさん
22/03/12 11:32:00.98 MLpoR2LT0.net
帳票印刷のためじゃね
ActiveReportsの印刷機能はWindows依存だし
152:デフォルトの名無しさん
22/03/12 11:33:53.48 MLpoR2LT0.net
ていうか、言語のちょっとした質問ならともかく
複合技術でなんかやるって話だともう初心者スレの範疇超えてると思うけどw
153:デフォルトの名無しさん
22/03/12 11:34:48.98 5CmXj57M0.net
FrameWorksって何?
154:デフォルトの名無しさん
22/03/12 11:45:36.72 dl+G0hLg0.net
>>147
ちょっと調べてみます
>>148
元々端末の追加コストが問題なので、ブラウザベースに移行するとなると
WebAssemblyは肝心のDBが不可とあるようなので
ASP.net Coreサーバー動かすために
WindowsServerが必要という理解なのですが間違ってますか?
>>149
そうです、独自の機能もありますが
大半の機能は画面開いてDBからデータひっぱってきて画面表示、
スタッフが操作して業務管理し、必要に応じて帳票印刷という流れが大半です
>>151
NET Framework、誤字です
すみません
155:デフォルトの名無しさん
22/03/12 11:50:42.45 MLpoR2LT0.net
WebAssemblyはDBが不可というか、ブラウザ上で動く技術だから
WebAPIなり挟まないとDBのデータ取ってこれないのよ
DB入出力をWebAPI化するところからだな。パフォーマンスどうなるかは知らんけど。
156:デフォルトの名無しさん
22/03/12 12:50:42.71 MMCseHWCd.net
こういうのこそXamarinの本領では?
画面以外のロジックの共有。
157:デフォルトの名無しさん
22/03/12 12:58:51.34 LonchplXd.net
>>154
153の言うとおり、こんなの結局WebAPI+薄いクライアントアプリという形にしかならないから画面以外のロジックは元々共有されてるんだよ
無意味
158:デフォルトの名無しさん
22/03/12 13:28:09.56 pgjQzAZm0.net
Blazor って想定はBlazor ServerじゃなくてWebAssembly なのか
まあ最大の問題は、帳票をどこからどうやって出すかで
それ以外は別にどうとでもなる
159:デフォルトの名無しさん
22/03/12 14:11:31.59 5Dc3szfW0.net
やってもやらんでもどっちでもいいとこばっかりライブラリってできるんだよね
160:デフォルトの名無しさん
22/03/12 14:18:56.82 Taqa0P0FM.net
ASP.Net CoreはLinuxで普通に動くよ
帳票の中身次第だがシステム的にはWeb化するのが常道
でもWebアプリの維持管理やセキュリティ対策とか趣味レベルで対応できるのか疑問だから
別の方法考えたほうがいいのかもね
161:デフォルトの名無しさん
22/03/12 14:32:11.13 MMCseHWCd.net
>>155
とはいえWCFも無くなったし、WebAPIに簡単にはならんでしょ。
負荷もサーバ側にどーんと乗るのでバランスも悪い。
162:デフォルトの名無しさん
22/03/12 15:14:08.73 WKXTy9Q3M.net
移行にかかるコストや時間を考えれば短期的には端末スペックあげるほうが断然良さそうだね
163:デフォルトの名無しさん
22/03/12 15:26:49.92 MMCseHWCd.net
端末スペックで殴るのが一番楽はもちろんそうだけど、業務時間に少しだけ使うならAzureでデスクトップ借りてシンクラよろしくRDPすんのもアリかもね。
164:デフォルトの名無しさん
22/03/12 15:38:30.18 WugjRoTQM.net
>>143の時点ではクライアントアプリだったのをWebアプリにしようとしてるのかな?
正直小規模な会社なら>>145の言うようにWinForms + .NETFramework 4.8で良いような気がする
165:デフォルトの名無しさん
22/03/12 16:46:13.52 MLpoR2LT0.net
まあ規模次第だね
Web化するとデプロイの手間は軽減されるけど、少数台くらいだとあまり旨みがない
それなら端末に多少金掛かった方がマシ
166:デフォルトの名無しさん
22/03/12 17:00:48.11 dl+G0hLg0.net
皆さんアドバイスありがとうございます
>>162
そうです、重い作業はデスクトップで、軽いのは小さいタブレットPC(ほとんどAtom)で
端末ごとに認証時に動作モードを変えて異なる画面サイズに対応させています
Atom機は遅いし故障も多いし、破損も多い・・・という状況で苦慮してます
移行の労力を考えるとやっぱりそのままいくのが一番妥当というところなんですね・・・
安くて性能の高いものが出てくるのも期待しつつ
軽い作業で使っている台数の多いAtomのものをせめてN4000番台に入れ替えながら耐えて
稼働している部分は触れずに、暇なときにLinuxにASP.NetCoreいれてWebアプリ開発にチャレンジして
徐々に軽い方だけ切り替えていく方向で考えてみます
167:デフォルトの名無しさん
22/03/12 17:04:39.68 zW5va19F0.net
webでC#は流石にどうかと思うんだけどねぇw
コードを流用したい?とかなのかも知れないが
まだUnityとかの方がマシな気がするし
実際Unityで業務アプリ作ってたりしている所もあるらしい
個人的にはwebにするならPHPとかで作り直した方が良いと思うけどね
C#でweb化、過去の資産があるから短期間でみたいな仕事が来たら速攻で断るw
168:デフォルトの名無しさん
22/03/12 17:21:57.02 pgjQzAZm0.net
単純にC#でweb化っていってもな
MVCもあるし、Blazor ServerもWebAssemblyもある
そろ
169:そろ本気でBlazor評価しとかんといかんなぁ 過去の資産があるから短期間でみたいな仕事は 言語がどうだろうが環境がどうだろうがヤバイ匂いしかしないがな つかAtomのタブレットってそんなに壊れるのか? 安物買いの銭失いとはよく言った気がするが
170:デフォルトの名無しさん
22/03/12 17:30:08.01 MLpoR2LT0.net
壊れる理由によるな
現場の扱い悪いなら、何使ってもすぐ壊れそうな気もするが
171:デフォルトの名無しさん
22/03/12 17:39:01.24 x75wVy6A0.net
ぇ
WebバックエンドでC#なんて最高に相性いいじゃない。
EFのおかげでDB周りも楽だし。
フロントUIはAngularなりReactなり任せちゃえばいいし。
PHPとかnodeとか言ってるのはあれか、アクセス数少なくてパフォーマンス気にしなくてもいい人たちか。
172:デフォルトの名無しさん
22/03/12 17:43:50.76 olrB42jq0.net
ショボいスペックのPCにそこそこの要求スペックのWindows入れること自体ねぇ
アプデもあるし2年もすれば時代遅れになるだろうことは想像できるけど
ハードウェアが壊れるかどうかは知らん
173:デフォルトの名無しさん
22/03/12 17:49:23.16 xsaO6v3ar.net
WebでC#ってローカルでDockerで構築してAWSとかにLinuxイメージごとデプロイするの?
174:デフォルトの名無しさん
22/03/12 18:17:01.12 JKJATSZJa.net
phpなんかでやるのと同じ。(phpはビルドないけど)ビルド結果だけをデプロイだよ
175:デフォルトの名無しさん
22/03/12 18:47:52.84 xsaO6v3ar.net
なるほど
ちなみにWebアプリの場合でも今はASP.net?もしくは.Net6?
いまいちどのフレームワーク使うのかわからん
176:デフォルトの名無しさん
22/03/12 18:50:58.36 kGvMtDUe0.net
なんか色々ごっちゃになってると思う
まぁMSのフレームワークの概念は自分も一時期混乱した
.net standardとか何だったの
177:デフォルトの名無しさん
22/03/12 18:51:04.71 xRtLdflG0.net
大食らいなブラウザと大層なフレームワークが満足に動くならロートルのWinFormsやWPFなんかスカスカ動かんか?
178:デフォルトの名無しさん
22/03/12 19:38:13.21 jj9bNUpZ0.net
ついさっき
(x, y) = (y, x)
こういう書き方ができるのに気付いたんだけど、これいつから出来るようになったん?
179:デフォルトの名無しさん
22/03/12 19:42:10.83 5Dc3szfW0.net
>>175
タプルっぽくね?
180:デフォルトの名無しさん
22/03/12 19:43:29.39 olrB42jq0.net
タプルが導入された当初からじゃないの?
181:175
22/03/12 19:59:58.59 jj9bNUpZ0.net
Pythonでは
x, y = y, x
ってできるの知ってたけど、C#ではできないと思ってた
182:デフォルトの名無しさん
22/03/13 00:00:51.74 u39Ee70g0.net
powershellから呼び出せるC#じゃできないけど?
csc.exeのバージョンも4.8とかそんなんだし
183:デフォルトの名無しさん
22/03/13 01:36:37.26 Z9Glx4pW0.net
自分のメールアドレスに打った文章を送るコードなのですがうまく動作しません
具体的に言うとgmail宛に何も届かないです
何処を改善すればいいのでしょうか?
URLリンク(ideone.com)
184:デフォルトの名無しさん
22/03/13 01:59:10.72 cmsw373x0.net
catchで何もしないのはやめよう
せめてログに出すとかさ
> SmtpClient server = new SmtpClient("自分のメール@gmail.com");
> mail.From = new MailAddress("email");
> mail.To.Add("dest");
パラメータ滅茶苦茶
SmtpClientに渡すのは通信先のSMTPサーバの情報
Toが送信先メールアドレス
SMTPサーバはGmailのが使えるようだから調べてみて
あとSystem.Net.Mailはもう非推奨 代替としてMailKitとか挙げられてる
185:デフォルトの名無しさん
22/03/13 02:01:10.18 jngzL68oa.net
gmailのアカウント側でsmtp有効にしてるかとか確認したら?
あとgmailのsmtpはあと3か月ぐらいで全面的に使えなくなるから仮に作れてもすぐ使えなくなるよ
186:デフォルトの名無しさん
22/03/13 03:18:43.91 5qwn5s+60.net
やべーelse ifが見えた時点で読むのやめたんだが
まず問題の切り分けからだね
このコードはgoogle.comのメールサーバー(mail.google.co.jpだと思うんだけどなぁ)に対してメールを直接投げるやつ?
それともgoogle.comの自分のアカウントにログインしてからまた別のメールアドレスにメールを投げるやつ?
あとkeyとか色々作る前に定型分のテストメールにしなよ
To: dest@gmail.com
From: my-account@gmail.com
Subject: TestMail
This is test mail No. 1.
.
187:デフォルトの名無しさん
22/03/13 05:56:09.15 m8v9NYfn0.net
>>175
三つ目の変数無しで値の入れ替えが出来るって理解で良いの?
188:デフォルトの名無しさん
22/03/13 08:02:23.19 roEKlQ2p0.net
タプルはずっとまえからじゃん。
もう5年たつんじなないのそれ。
189:デフォルトの名無しさん
22/03/13 08:03:34.17 roEKlQ2p0.net
もしかしてC#が複数の値をリターン出来るとかも知らんのかな?
190:デフォルトの名無しさん
22/03/13 09:01:18.15 1ZaIS7m70.net
( ´ー`) < シラネーヨ
191:デフォルトの名無しさん
22/03/13 10:10:05.19 IGUcP/is0.net
宣言と定義の違いってどうなってますか?
C++ではint x;は定義なんですよね?
C#ではint x;は宣言のような気がします...
192:デフォルトの名無しさん
22/03/13 10:29:47.04 vXOJHn5g0.net
>>188
どちらも宣言
URLリンク(docs.microsoft.com) では「宣言」となっている
「定義」は場合にもよるとは思うけど、(自作の)関数やクラスの定義の意味で使う
変数については宣言って言うね
193:デフォルトの名無しさん
22/03/13 10:37:14.46 IGUcP/is0.net
>>189
ありがとうございます
ちなusingやnamespceは定義ですか?
194:デフォルトの名無しさん
22/03/13 10:46:29.13 vXOJHn5g0.net
>>190
自分の場合はnamespaceで包むときは定義、使うときは単に「使う」系かな
定義(definition)は文字通り、「(存在してなかったものを)こういうものだと決めること」だと思ってる
さっき挙げたページでいうN::Cやfのような処理や型自体が存在してなくて、それを「こういうやつだ」と決めてコンパイラに教えているね
変数とかの宣言(declaration)は「この変数はこの型として使うよ」っていうイメージかな
だからC#だと using System;は URLリンク(docs.microsoft.com) だと「using 宣言」てなってるから宣言かな
195:デフォルトの名無しさん
22/03/13 10:47:50.99 vXOJHn5g0.net
191だけど、ミスった
参考ページを提示しているusingのところはC++のやつに読み替えてね
196:デフォルトの名無しさん
22/03/13 10:49:58.20 IGUcP/is0.net
>>191
ありがとうございます
参考にします
197:デフォルトの名無しさん
22/03/13 23:57:03.38 Z9Glx4pW0.net
>>181 >>183
ありがとうございます
アドバイス通り引数を直したんですがメール送られてこず…でした
仰るとおり自分のメールアドレスにログインして別のメールアドレスにメールを送るプログラムなんですが
何処を直したら正常に機能しそうですかね
198:デフォルトの名無しさん
22/03/14 00:07:12.67 jx7Gq6xC0.net
180のメールメソッドの内容を
URLリンク(ideone.com)
に変えたのですが変化無しでした。1から考え直すしかないでしょうか
199:デフォルトの名無しさん
22/03/14 00:35:23.85 uIprxjAI0.net
URLリンク(docs.microsoft.com)(system-net-mail-mailmessage)
失敗したらなんかのExceptionが投げられるみたいだから
catch(Exception ex){ Console.Error.WriteIine(ex);}
してみろ以上のことが言えん
200:デフォルトの名無しさん
22/03/14 00:44:53.46 k1s/giD10.net
IE7ベースのWebbrorser が古いので新たに使うとしたら
Webviw2 と CefSharp どっちがいいですか?
201:デフォルトの名無しさん
22/03/14 00:57:27.18 XtxfFNUva.net
好きにしろよ
俺はwebview2一択だと思ってる
202:デフォルトの名無しさん
22/03/14 01:33:25.53 j1ckIHBu0.net
CefSharpは起動重いな。
WebVieW2は速いがあまり浸透してないコンポーネントのインストールが必要だわな。
203:デフォルトの名無しさん
22/03/14 10:17:48.69 /kSWYd/QM.net
Chromium関連のファイルサイズがでかいからそのへん気になるならWebView2
MSを信用しないならCefSharp
204:デフォルトの名無しさん
22/03/14 14:06:43.59 fKAVqTeN0.net
WebView2 以前ちょっと使ったけど、ページ表示前の初期化が毎回遅かったような記憶がある。
記憶違いかもしれないけど。
205:デフォルトの名無しさん
22/03/14 14:24:28.43 XtxfFNUva.net
コンストラクタでurl代入できりゃいいのに、その頃はまだ内部での初期化が終わってないからできないな
206:デフォルトの名無しさん
22/03/14 14:55:17.24 akZZG4oSr.net
Webは戻る進むがあるからしっかりステート管理しないとしぬ
207:デフォルトの名無しさん
22/03/14 21:53:50.24 3nbBdTge0.net
簡単な図形データをdxfファイルにしてみたいんですけど、どこか参考になるサイトないですか?
幅500㎜✖長さ1000㎜の長方形枠内に円とか長方形とかそんな感じのもので、レイヤーとか線種とかとくなく実線のみで表現したいんですけど。
208:デフォルトの名無しさん
22/03/14 22:00:22.47 Wh2n8FEC0.net
URLリンク(www.codeproject.com)
209:デフォルトの名無しさん
22/03/14 23:03:31.17 rbCSOV+9a.net
dxfを読みたいっていうとバイナリだ3dだ色だなんだって色々なパターンあるから大変だけど
dxfを書き出したいってだけなら難しいこと考えずに適当に「dxf ファイル仕様」とかぐぐって調べたらいいよ
210:デフォルトの名無しさん
22/03/15 06:37:09.86 Hxz/HcaZd.net
ありがとうございます!
211:デフォルトの名無しさん
22/03/15 07:49:26.57 FHh5bEnc0.net
いえいえ
212:デフォルトの名無しさん
22/03/16 17:05:06.84 KL1RQagld.net
formsでスケーリング変えると部品の位置がズレたりするんだけど、
是正する定番の方法あったら教えてたもれ
213:デフォルトの名無しさん
22/03/16 17:51:38.31 sDB+P2C+0.net
>>209
フォームのサイズが変更されたとき?
サイズ変更についてなら「サイズが変更された」ときのイベント内で再計算するか、Panel系クラスを利用して表示するかだと思う
フォームの大きさを小さくしたら下に回り込むようなやつならFlowLayoutPanelで、HTMLでいうテーブルならTableLayoutPanelとか
Panel系にDockをFillにしたりすれば再計算はプログラムがやってくれる
214:デフォルトの名無しさん
22/03/16 18:39:08.14 3Hj+1jHn0.net
スケーリング変えた時、だろ
215:デフォルトの名無しさん
22/03/16 18:55:49.03 IT+0ZBM10.net
>>209 ですが、
色気を出して最初にSetProcessDPIAware()を呼んでたので、これ呼ぶのをやめたらズレは直りました。
これはフォントがボヤンとするいわゆるDPI仮想化状態ですね。
ただこれだと座標取得関係に難ありだったと記憶してるので、
SetProcessDPIAware()を呼び出しつつ、
form1.AutoScaleMode = AutoScaleMode.Dpi;
にすると�
216:Rントロールのズレは収まりました。フォントの大きさの再調整は必要ですがこれが良さそうです。 一旦問題を整理してみます。
217:デフォルトの名無しさん
22/03/16 19:24:24.87 gx2+2oye0.net
>>212
スケーリングに対応する場合は、フォントはBMPを含まないメイリオやYu Gothic UI等を使うと良いよ
218:デフォルトの名無しさん
22/03/16 19:46:22.48 qedjxSBq0.net
グリッドレイアウト
でググると参考になるかもしれん
もちろんGuiがおおっぴらにサポートしているわけではないが
どうしたいかの参考になると思う
219:デフォルトの名無しさん
22/03/16 21:22:24.16 IT+0ZBM10.net
コントロールのフォントを自動調節するやつできたんでとりあえず解決しました。
void AutoFitFontControl(Control ctl, string fontname, int maxpoint) {
var g = System.Drawing.Graphics.FromHwnd(ctl.Handle);
var point = maxpoint;
for (;;) {
SizeF sf = g.MeasureString(ctl.Text, new Font(fontname, point));
if (ctl.Width < (int)(sf.Width) || ctl.Height < (int)(sf.Height)) {
point -= 2;
} else {
break;
}
}
ctl.Font = new Font(fontname, point);
}
220:デフォルトの名無しさん
22/03/17 09:57:20.56 8n4FcalY0.net
C#勉強中で分からない点があるので質問です
テキストボックスをデータバインドしていてViewModel側はstringでSetPropertyで双方向としていて
テキストボックスでキー入力されてもコード上でstringの値を代入等で変えても画面に表示されている値と内部で保持している値が一致するようにしています
これをstringから独自のクラス、例えば電話番号クラスとかにするとテキストボックスにキー入力しても内部で保持している値に書き換わってしまうのですがこれって何に原因があるのでしょうか?
View側の処理
TelephoneTextBox.DataBindings.Add("Text", viewModel, nameof(ViewModel.Telephone));
ViewModel側の処理
public TelephoneValue Telephone
{
get => _telephone;
set => SetProperty(ref _telephone, value);
}
TelephoneValueは内部にstringを持っていてToString()でstringを返しています
221:デフォルトの名無しさん
22/03/17 12:22:14.37 Mvnns9V0d.net
>>216
あなたがどっかで定義したTelephoneValue型はxamlが理解できるものじゃない
TelephoneValueを1引数のstringで構築できるかもしれんがそんなことは知ったこっちゃない
(Converterを自作すればなんとかなるかもしれんが)
222:デフォルトの名無しさん
22/03/17 12:37:39.27 0cmWCmO7d.net
おそらくXaml側でBindingエラーが出てる
アプリが落ちるわけじゃないから気付きにくいが
Visual Studio環境なら出力ウインドウとバインディングエラーのウインドウにエラーメッセージが出てるはず
223:デフォルトの名無しさん
22/03/17 13:52:54.08 i4B2mw3zM.net
すいません使ってるのはWFPでは無いです
formで書いてます
ただ>>217が言ってるようにそうなる理由はset時に型を理解できない為と思います、テキストボックスからの文字列は文字列であり独自の型に入れられないから上記のような挙動に見える
エラーは出てなかった様に思いますが帰ったら確かめます
これって独自の型を定義してその型でバインドした物と双方向する事はそもそも出来ないんでしょうか?
intにしろDateTimeとか文字列への型変換が出来るので出来そうに思えるのですが
224:デフォルトの名無しさん
22/03/17 14:00:10.89 AolyjzvfM.net
文字列から変換できなきゃ意味ない
telephone = "でんわ"
225:デフォルトの名無しさん
22/03/17 14:39:30.41 rF5KH7cwa.net
こんなにすれば内部で保持してるのとuiとで双方向できるし
内部→ui、ui→内部、どっちかだけ片方bindもできる
class telephone
{
int a,b=0;
public string tel
{
set{ var d = value.split('-');a=int.parse(d[0]);b=int.parse(d[1]);
get{ return $"{a}-{b}";
}
226:デフォルトの名無しさん
22/03/17 14:46:48.12 LzLa9LO7d.net
System.ComponentModel.TypeConverter?
227:デフォルトの名無しさん
22/03/17 16:15:30.46 euNpZQ+M0.net
そのTelephoneValueクラスがstring型のTextValueプロパティを持ってるとして、
.DataBindings.Add("Text", vm, "Telephone.TextValue")
とすればいける
228:デフォルトの名無しさん
22/03/17 20:21:34.94 8n4FcalY0.net
>>220-223
色々ヒントありがとうございます。後程色々試してみて報告できそうな結果ならしたいと思います
また分からなかったら聞くかもです
最初、代入演算子かstringformat以降をごにょごにょする?か最悪テキストボックス側をいじる、いやUIはさすがにいじりたくない
とかですが"Telephone.TextValue"な書き方もできるんですね目から鱗です
TypeConverterは調べてみます
最終的にやりたいのはテキストボックスのマスクの動的判定
例えば06と打てば06-、続けて6を打てば06-6、4なら064-みたく表示(実装済み)
かつデータベースに書き込むのはハイフンなしにして書き込み、読み込む時はハイフン付けてテキストボックスに表示(生のstringでは検証済み)
これを整合性合わせてしたいが生のstringを使いたくなかったのが理由
まぁテキストボックスいじる方がよっぽど気持ちが悪いのですが
取り合えず上記アドバイス試してみますありがとうございます
229:デフォルトの名無しさん
22/03/17 23:08:34.91 RdQIwXxN0.net
市外局番ルールってどっかに計算式あるの?
まあ同じ市外局番でも省略すると繋がらないとかふざけた地域も多いしトンキンオオサカだけでもいいか
230:デフォルトの名無しさん
22/03/17 23:26:45.22 8n4FcalY0.net
私は総務省にこんなんある事知って上記の話はそれらしく実装した
URLリンク(www.soumu.go.jp)
厳密にやろうとするとクソ面倒なのであくまでそれっぽくしただけだけど一応区切り位置とかのルールは存在する
231:デフォルトの名無しさん
22/03/18 10:15:35.13 exJrGo4o0.net
Socket.IO (SocketIoClientDotNet) を利用し、下記コードでメッセージの購読は出来たのですが
this.socket = IO.Socket("URLリンク(localhost"));
this.socket.On("new-message", (jo) =>
{
this.RecvNewMessage(jo as JObject);
});
購読を終了する方法が解りませんでした。
どのようにすれば終了できるでしょうか?よろしくお願いします。
232:デフォルトの名無しさん
22/03/18 10:42:52.74 GLaoxLmQ0.net
OnしたんならOffすればいいんじゃね 知らんけど
233:デフォルトの名無しさん
22/03/18 15:59:31.12 Fy/f5KFA0.net
コメントアウトはVSCodeのようにCtrl+/でやりたいんだけど
設定で変更できるよね?
なぜ最初からそうなっていないの?
Ctrl+k,cは面倒極まりない。
234:デフォルトの名無しさん
22/03/18 16:13:03.84 NghzuPCe0.net
頬杖つきながらマウスで選択してツールバーでポチっとするだけだから。
20年遅れてるUNIX開発環境に合わせろと言われも困ります。
235:デフォルトの名無しさん
22/03/18 16:17:37.38 /Q6fnTiGa.net
ツールバーのボタン標準で表示されてるんだな。初めて知った
だがむしろデフォルトをkc、kuで統一しろよ
236:デフォルトの名無しさん
22/03/18 16:23:47.13 cx5y3qmg0.net
ロジのマウスすぐチャタるから俺もPC操作はできる限りキーボードで行いたい派
237:デフォルトの名無しさん
22/03/18 16:32:30.07 r5cg+x+od.net
プログラム開発でクソAIMやると切れそうになるからマウス使いたくない
238:デフォルトの名無しさん
22/03/18 16:46:59.98 Ukh28wt40.net
ショートカット変えれるんだから変えろよ
239:デフォルトの名無しさん
22/03/18 16:48:40.02 /Q6fnTiGa.net
>>232
捨てろよ。もしくは頻繁に接点復活スプレー
240:デフォルトの名無しさん
22/03/18 16:50:42.39 NghzuPCe0.net
UNIXなんてのは太古の昔から市場の片隅で生きてきた絶滅危惧種だったのに
使ってるアホどもは世界の中心だと思ってるから厄介。
241:デフォルトの名無しさん
22/03/18 16:51:47.06 NghzuPCe0.net
マウスイベント監視してチャタリング無効化するだけ。
242:デフォルトの名無しさん
22/03/18 16:59:58.79 /Q6fnTiGa.net
チャタリング判断が時間要素と多少の移動値しかないから、ソフト的な対策はできない(操作性悪いのは変わらない)んだよ
俺の対策の腕が悪いからかもしれないけどな・・・
243:デフォルトの名無しさん
22/03/18 17:05:47.26 NghzuPCe0.net
スキルないならダイソーでマウス買ってきな。
244:デフォルトの名無しさん
22/03/18 21:36:09.99 qCqrql870.net
タイポしやすいのでむしろなるべくキーボード使わないようにしてる派
インテリセンスとコピペを駆使しまくってる
245:デフォルトの名無しさん
22/03/18 23:35:46.48 J38pP+oz0.net
↑チャタリングの意味判ってない人
246:デフォルトの名無しさん
22/03/18 23:37:54.94 J38pP+oz0.net
発見伝!て続けようとしたら書き込んじゃった
ただの感じ悪い人だなしまんてっく
247:デフォルトの名無しさん
22/03/19 00:23:07.37 QWNhEVj80.net
何言ってんだこのバカ
248:デフォルトの名無しさん
22/03/19 01:33:54.85 M/uS9iCI0.net
最初から最後まで意味が分からなくて草
249:デフォルトの名無しさん
22/03/19 02:23:05.14 VxWFG4OV0.net
バーコードよりハゲのほうがマシ。
まで読んだ。
250:デフォルトの名無しさん
22/03/19 02:31:34.95 oVqI+gO+0.net
時代はQRコードやで
251:デフォルトの名無しさん
22/03/19 12:51:17.68 UXt2lmR80.net
まだらハゲ
マーブルハゲ
252:デフォルトの名無しさん
22/03/19 14:08:52.76 advrh/I10.net
USBメモリを安全に取り外すのはC#で書けたんですが、
その後USBメモリを抜き差しせずに再認識させる方法はあるでしょうか
253:デフォルトの名無しさん
22/03/19 14:12:14.78 XXD5kKqhr.net
なんでそんなことまでやってるの
254:デフォルトの名無しさん
22/03/19 14:29:31.78 advrh/I10.net
>>249
リモート先のマシンでメディアを抜き差しする処理とかをよく発生するので…
現地作業者に連絡する手間を省きたいってのが大きいです
255:デフォルトの名無しさん
22/03/19 15:09:08.63 DtRySdf10.net
取り外しやったら物理的に外さないとだめじゃなかったっけ?
ドライバの無効→有効じゃだめなん?
256:デフォルトの名無しさん
22/03/19 15:29:43.49 oVqI+gO+0.net
vectorにあるunhotplugとeasterっていうのを呼ぶツール作ればいけるのでは
257:デフォルトの名無しさん
22/03/19 20:19:19.80 VZmL8CeM0.net
おせっかいというか余計なアレやけど、
USBを擬似的に抜き差しさせるプログラム作って新たな障害の素を作るより、
USBを使わない、ネットワークストレージに置き換えるとかの方法で、
根本的な状況を改善するほうがいいんじゃないかな。。
258:デフォルトの名無しさん
22/03/19 20:33:21.04 D/0X5tNm0.net
USBに何か挿されたよシグナルをOSに送ればいいんじゃね
259:デフォルトの名無しさん
22/03/20 00:37:40.27 J9wgpmKzM.net
自分ところの放置鯖は休止復帰後にUSBの再認識をバッチでやってた
時々USB死んでマウスが動かなくなるから
やり方は忘れた
260:デフォルトの名無しさん
22/03/20 01:21:44.08 RMYANpbIa.net
usbメモリ直はムリだと思うからdevconいじくりまわしてワンチャンかな
261:デフォルトの名無しさん
22/03/20 22:42:36.53 0372vEy10.net
wmiからPnPEntity使った方がまだやりやすそう
262:デフォルトの名無しさん
22/03/21 06:21:02.19 B3XvFTTu0.net
そもそも何故USBを抜き差しした事にしたいのかわからん
263:デフォルトの名無しさん
22/03/21 08:11:52.79 idY8N9Dd0.net
スマートコンセントにアダプター式のUSBハブ繋いで電源ON/OFFすればいいんじゃねw
264:デフォルトの名無しさん
22/03/22 00:17:50.57 gjcW4Tfu0.net
まあハードで細工前提なら間にマイコンなりでVCCをスイッチすればできますけどね
ソフトでできないかという話なので
devconでdisable→enableは期待した動作にはならなかったので他の方法を考えて見ます
265:デフォルトの名無しさん
22/03/22 00:39:31.18 k34A21mc0.net
目的を達成出来れば何でもいいって話だと思ったんで、違うならスルーしてくれ
266:デフォルトの名無しさん
22/03/22 03:13:27.47 dk64x/8s0.net
Disposeパターンの学習中なのですが、マネージリソースとアンマネージリソースの見分け方が分からないのですが、
よい解説サイトを教えて頂けないでしょうか。
267:デフォルトの名無しさん
22/03/22 03:27:22.28 Fi74risNa.net
難しく考えることない。この程度の見分け方で十分だろ
class A : IDispose ←宣言を見たときにIDispose派生ならアンマネージド
A a = ~
a. ←「.」を打ち込んだ時にDisposeが表示されたらアンマネージド
using (var a = new ~) ←usingで囲んでエラー出たらマネージド
268:デフォルトの名無しさん
22/03/22 07:12:28.40 p81GCeRAM.net
Disposeの中身が
MessageBox("error",MB_ICONERROR);
のみでアンマネージド?
269:デフォルトの名無しさん
22/03/22 08:11:26.68 Fi74risNa.net
Disposeの中身が空でもアンマネージなんだよ。細かいこと気にするな
270:デフォルトの名無しさん
22/03/22 08:33:08.50 kAgwAO/L0.net
いちいち継承元全部辿ってIDisposableあるか確認して手動で開放しないとリークしまーすとかいう欠陥言語
271:デフォルトの名無しさん
22/03/22 08:35:18.57 OaCGWLhd0.net
win32リソースかどうかなんか用途ですぐわかるだろ…
272:デフォルトの名無しさん
22/03/22 08:39:28.18 kAgwAO/L0.net
書いてから気づいた>>263の方法で確認すりゃまだ楽か
だがしかし、実装を強制できないからdisposeしてなくても気づけないってのがな
273:デフォルトの名無しさん
22/03/22 08:41:02.24 kAgwAO/L0.net
>>267
そんなの場合による
274:デフォルトの名無しさん
22/03/22 08:51:45.38 OaCGWLhd0.net
キミのように脳に欠陥があるなら仕方がない。使い終わったら常にdispose()呼ぶだけの話。
275:デフォルトの名無しさん
22/03/22 09:03:08.94 kAgwAO/L0.net
>>270
草
276:デフォルトの名無しさん
22/03/22 09:22:16.11 OaCGWLhd0.net
( ´_ゝ`)プッ
277:デフォルトの名無しさん
22/03/22 10:11:19.03 kAgwAO/L0.net
使い終わったら常にdispose()呼ぶだけ!キリッ
話の本質わかってなくて草生える
278:デフォルトの名無しさん
22/03/22 10:34:09.76 G7lfoYcY0.net
Disposeでマネージ/アンマネージってことは
protected virtual Dispose(bool disposing)
のdisposingの真偽で何を解放すべきかってことだよね
.NETのオブジェクトとして存在しているモノがマネージリソース
大体は自分がメンバに持ってるIDisposableなオブジェクトを意味する
これらはdisposing==trueのときだけDisposeすればいい
アンマネージリソースはWindowsのAPIとかで直接確保した
279:デバイスコンテキストとかメモリ 大抵はIntPtr型で保持している こういうのはそれぞれのリソースの解放方法に従った方法で直接解放する これらはdisposingに関わらず常に解放する
280:デフォルトの名無しさん
22/03/22 10:35:59.07 OaCGWLhd0.net
> いちいち継承元全部辿ってIDisposableあるか確認して手動で開放しないとリークしまーすとかいう欠陥言語
分かってるよ。話の本質は、馬鹿がヘジが開発した言語にマウンティングした、ということだろう。
だがその試みは失敗した。それだけ。
なんならwin32リソースについて言語はどう管理すべきいくらでもキミの意見を語っていいんだぜ?
だがキミからは何も出てこない。知ったか初心者だからだ。
281:デフォルトの名無しさん
22/03/22 11:53:43.00 myN/pITuM.net
そうカッカすんなよおっさん見苦しいぞ
282:デフォルトの名無しさん
22/03/22 12:15:11.68 kAgwAO/L0.net
>>275
顔真っ赤で草
283:デフォルトの名無しさん
22/03/22 12:31:50.91 OaCGWLhd0.net
初歩的なリソース管理程度で発狂して言語貶してるド初心者に
馬鹿にされてキレるわけないだろう。馬鹿かこいつ、としか思わん。
284:デフォルトの名無しさん
22/03/22 15:52:49.70 XhX0v2Lu0.net
その調子で血管切って死なねーかな
285:デフォルトの名無しさん
22/03/22 17:16:17.21 pk95uqSaM.net
あああああああああああああああああああああああああああああああ!!!!!!!!!!!(ブリブリブリブリュリュリュリュリュリュ!!!!!!ブツチチブブブチチチチブリリイリブブブブゥゥゥゥッッッ!!!!!!!)
286:デフォルトの名無しさん
22/03/22 19:17:57.13 kPYOUkgu0.net
そもそもc#のデストラクタが産廃だからあてにしてる動作だろ
287:デフォルトの名無しさん
22/03/22 19:49:04.13 1zUmccnld.net
GC(マークアンドスイープ)+FinalizeとDisposeの相性が悪いだけだろ
C#に限った話じゃない
288:デフォルトの名無しさん
22/03/22 20:58:45.96 hNvbiY4S0.net
exe終了したら何もかも解放されるんでしょ?
289:デフォルトの名無しさん
22/03/22 21:05:08.48 HvRJN3MAa.net
基本的には終了で開放だけど、すべてが開放されるとは限らない
よくあるのがexe内部でexcel使ったら、exe終了してもexcelのプロセス残ったままみたいなやつ
290:デフォルトの名無しさん
22/03/22 21:09:25.23 kAgwAO/L0.net
ようやく>>282みたいなまともな回答出てきて嬉しい
スコープ外れたタイミングでデストラクタ呼び出し保証しなかった理由ってどこかに解説とかないのかな?
C#の現状のデストラクタとかガチゴミじゃん
291:デフォルトの名無しさん
22/03/22 21:19:04.18 Ky9cYioTM.net
またいつもの質問者そっちのけでの罵倒合戦かよ・・・・・
アンマネージドリソースは文字通りC#の管理下にない(un-managedな)リソース
具体的にはunsafeで確保した配列・ポインタやWin32APIを呼び出して確保したIntPtrなど
Disposeのタイミングで適切な手法で(それこそWin32APIを呼ぶなどして)リソース解放しないとメモリリークする
マネージドリソースはC#の管理下にあるリソース全般
FileStreamやDbConnection、Bitmapオブジェクトなどもこれ
そういうオブジェクトをクラス内のメンバ変数で持ってるなら、Disposeメソッド内で
それらのメンバ変数のDispose()を呼ぶことでリソース解放するお約束になってる
>>263の説明はデタラメもいいとこだしそもそも「IDispose」ってなんだよ
>>263のデタラメに気付かずC#を欠陥言語呼ばわりするために乗っかった>>266の言ってることも同じくデタラメなんだけど
こいつは罵倒マウンティングすること自体が目的でわざとデタラメに乗ってるのかそれとも素で理解してないのかは分からん
292:デフォルトの名無しさん
22/03/22 21:23:17.10 0A7XAa2y0.net
C++/CLIならデストラクタが使えるから問題ないんだよな。捨てたのはもったいない。
293:デフォルトの名無しさん
22/03/22 21:31:04.74 kAgwAO/L0.net
それな
GCとかの仕組み上どうしても無理でしたってんなら納得逝くんだけどその辺知りたい
294:デフォルトの名無しさん
22/03/22 21:39:13.30 6LsnJNlYd.net
>>285
スコープ外れたってどうやって判断するの?
295:デフォルトの名無しさん
22/03/22 21:39:56.93 3weeWjHs0.net
というかここら辺はサンプルというか、実際使ってるコードみないとピンとこんよな
これは意味あるIdisposable、こっちは意味ないとかで
296:デフォルトの名無しさん
22/03/22 21:41:21.16 1zUmccnld.net
>>287
ref class C{
~C(){} // Destructor
!C(){} // Finalizer
};
のコンパイル結果が
// C# DLL
class C:IDisposable{
Dispose(); //Destructor???
~C();//Finalizer
}
であることをご存知でない?
297:デフォルトの名無しさん
22/03/22 21:46:59.16 OaCGWLhd0.net
C#を欠陥言語呼ばわりするだけあってGCが何かすら知らないアホの子だったとさ。
ヤレヤレ ┐(´ー`)┌ マイッタネ
298:デフォルトの名無しさん
22/03/22 21:51:59.68 kAgwAO/L0.net
>>289
言語自体の実装は見たこと無いからサパーリ
せやから解説とかしてる人いないのかなって
299:デフォルトの名無しさん
22/03/22 21:52:39.06 kPYOUkgu0.net
>>283
されねーんじゃねーか?
俺はあふれるまで動かないって言ってるじゃん
msdnより
ガベージ コレクションの条件
ガベージ コレクションは、次のいずれかの条件に当てはまる場合に発生します。
システムの物理メモリが少ない場合。 OS からのメモリ不足通知またはホストによって示されたメモリ不足のいずれかによって検出されます。
マネージド ヒープで割り当てられたオブジェクトによって使用されているメモリが、許容されるしきい値を超える場合。 このしきい値は、プロセスの進行に合わせて絶えず調整されます。
GC.Collect メソッドが呼び出されます。 ほとんどの場合、ガベージ コレクターは継続して実行されるため、このメソッドを呼び出す必要はありません。 このメソッドは、主に特別な状況やテストで使用されます。
300:デフォルトの名無しさん
22/03/22 21:53:03.08 0A7XAa2y0.net
>>291
スコープを外れたときに自動的にDispose()が呼ばれるから問題ないってことなんだが。
301:デフォルトの名無しさん
22/03/22 22:22:58.92 1zUmccnld.net
>>288
お前はメモリとかリソースの管理を他の言語でどうしてるかもっと勉強するべきだ
C/C++がユーザーに全部丸投げしてるのがいい加減辛いので言語側が管理すればいいんじゃね?ってのがGC。
GCの方式で主流なのは参照カウント方式とマークアンドスイープ方式。
参照カウント方式は循環参照(this._obj=this)があると回収されないから、
C#多少大きめのコストを支払ってでもマークアンドスイープ方式にした。
リソース解放のタイミングをコントロールしたけりゃIDisposable使え
解放漏れの保険でファイナライザ使え
URLリンク(ufcpp.net)
C#1.0のリリースが2002/02だから当時はそれでも充分だったんだろう
302:デフォルトの名無しさん
22/03/22 22:39:21.44 Ky9cYioTM.net
そもそもC#は「デストラクタなぞ使うべきではない」っていう思想だし
それゆえにリソースの解放はデストラクタではなくDispose()で行う
(万一Dispose()を呼び忘れた場合に備えて>>291の実装でデストラクタで救済するけど、これも
パフォーマンス上好ましくないんでDispose(bool disposing)みたいなDisposeパターンの書き方で処理を最小化する)
って方針で首尾一貫してるんだけどさあ
その方針にケチつけてデストラクタがクソだのIDispose確認がメンドクサイだの言ってる人たちのほうがおかしいだけなんだよ
>>273が
「話の本質わかってなくて草生える」
とか書いてるけどまさにそのとおり
303:デフォルトの名無しさん
22/03/22 22:49:13.09 Ky9cYioTM.net
もひとつ気になってたんだけど、Dispose()呼び出しの必要性をいちいち確認して書くのが大変っていうけどホントかよ?
マネージドリソースを扱うにしたって、ローカル変数ならusingで書けばDisposeいらないよね?
最近のC#のバージョンなら中括弧で囲う必要すらなくなったよ?
クラス内のインスタンス変数だとしてもさあ、
DIで初期化するフィールドならDIコンテナに任せればDispose()呼ばなくていい
自前で生成初期化するフィールドだとしてもその個数もたかが知れてるしDisposeの要否も明快に分かるでしょ
それとも、自分で書いてるクラスの中がごちゃごちゃでDisposeが必要な変数がどれか把握しきれないってこと?
そんなクソみたいなゴミ溜めクラスしか書いてないのだとすれば、言語仕様じゃなくてクラス設計/実装能力の問題だと思うんだよね
304:デフォルトの名無しさん
22/03/22 22:56:19.99 Ky9cYioTM.net
ごめん嘘書いた
>>291の実装はC++/CLIの話だったのか(ごめんC++/CLIはやったことがないので判らない)
Disposeパターンのデストラクタと似たようなものだと思い込んで混同しちゃってた
305:デフォルトの名無しさん
22/03/22 22:56:39.59 OaCGWLhd0.net
> そもそもC#は「デストラクタなぞ使うべきではない」っていう思想だし
聞いたことねーなw
デストラクタは非同期ですってだけだ。同期したいならdispose使えという単純な話でしかない。
306:デフォルトの名無しさん
22/03/22 23:25:36.30 Ky9cYioTM.net
あれどっかに書かれてたと思ったんだが・・・と思って調べたら
URLリンク(docs.microsoft.com)
「高額な外部リソースを使用している場合」という限定で「明示的に解放する手段を用意することが推奨されます」
とはあったけど、デストラクタなど使うべきではないとまでは書かれてなかった
たしかにちょっと踏み込みすぎたか
てか「デストラクター」じゃなくて「ファイナライザー」って呼ぶように変わったのね・・・いつから?
そのわりに
URLリンク(docs.microsoft.com)
では「デストラクター」のままだったりしてるけど
307:デフォルトの名無しさん
22/03/22 23:40:08.97 OaCGWLhd0.net
元々finalizeはCLR側の用語でデストラクタはC#側の用語。
MSのゆとり化が進んで馬鹿すぎて区別できなくなったんだよ。
308:デフォルトの名無しさん
22/03/22 23:47:20.01 3UvLvdTM0.net
デストラクタを実装したクラスはガベコレの効率が落ちる(世代があがる)からなるべく使うなって話だったはず
309:デフォルトの名無しさん
22/03/23 00:14:26.29 fh4EIdzSM.net
>>302 >>303 の書き込みをヒントに検索したら
URLリンク(ufcpp.net)
このページにたどり着いて
デストラクタ→ファイナライザに呼び名が変わる理由もデストラクタのコストが極大なことも分かった
GC.SuppressFinalize()っていままで意味が分からないまま機械的に書いてたけど大事だったのね
いろいろ賢くなれた、ありがとう
310:デフォルトの名無しさん
22/03/23 06:24:39.80 XsByKBbP0.net
ならなくていいから直近50レス以内で俺以外に書き込んでるやつは直ちに全員頭かち割って中央線の始発に飛び込んで死ね
311:デフォルトの名無しさん
22/03/23 06:36:55.59 Br4OtuZoM.net
長文ゲェジ共空気読めよ
(ユーザーが)欠陥言語
確かに間違ってねーな
312:デフォルトの名無しさん
22/03/23 23:47:04.44 blfYR8q/M.net
デストラーデがどうしたって?
313:デフォルトの名無しさん
22/03/24 04:45:47.25 AIr8SSYM0.net
ゼントラーディがキュンキュン☆
314:デフォルトの名無しさん
22/03/27 19:21:45.49 ThH+K+970.net
float,double型について質問です。基本的に精度のたかいdouble型オンリーで良いと思います。
double型だけじゃなくfloat型が混ざっているソースをみるのですがそれは何故でしょうか?
315:デフォルトの名無しさん
22/03/27 19:25:09.32 p42Vgj/c0.net
>>309
C#に限った話じゃないがdoubleの方がメモリを多く使って計算速度も遅くなるから
316:デフォルトの名無しさん
22/03/27 19:30:11.97 ThH+K+970.net
>>310
ありがとうございます。
リストのときにdoubleじゃなくfloatがよく使われてたのはそれが理由だったんですね。
317:デフォルトの名無しさん
22/03/27 20:53:18.65 rqiHHq3k0.net
floatとdoubleの混用なんてそんな傾向が見いだせるほど頻繁に使われているとは思えんが。
たまたま見たそのコードではそういう使い方をしていたに過ぎないんでは。
318:デフォルトの名無しさん
22/03/27 22:06:23.31 XoV4gFeA0.net
昔のコードをまだ使っててfloatのとこがあるって理由じゃねーかな?
319:デフォルトの名無しさん
22/03/27 22:32:37.28 K7MWSPEs0.net
C++では機械学習と3Dレンダリングでの並列化を目的にfloat16_tとかいう概念が生産されたりしてるからfloat自体は過去の遺物ってほどでもない
C#だと実行速度を気にするよりも開発を楽にすることを重視することが多いからdoubleオンリーでいいのは確か
320:デフォルトの名無しさん
22/03/27 23:11:31.46 HQutMm3I0.net
専用命令とかでベクトル演算するなら、floatの方が同時に演算出来る数が多いから単純に速くなる
321:デフォルトの名無しさん
22/03/28 01:08:53.91 TOp/Y7AF0.net
まぁ精度や速度がクリティカルでなければ悩む時間が無駄だしdoubleでいいでしょ
322:デフォルトの名無しさん
22/03/28 09:26:10.00 1rap9yocr.net
>>309
主に組み込みのシステムと通信していたりする場合、相手が float のサイズを要求することもある。
>>310
メモリは多く使うが、今どきはハードウェアで double を計算するはずなんで、遅いはダウト。
むしろfloat の方が double への変換の分遅くなるまである。
323:デフォルトの名無しさん
22/03/28 09:29:45.95 MxvDEKd20.net
いまだにダウトとか言う香具師っているんだな
ダウトとか今日日聞かねえわ
324:デフォルトの名無しさん
22/03/28 11:03:16.37 9Kb03WZY0.net
というかそれぞれの場合過ぎるやろ
「基本doubleでいい」には自分は同意するけど、
別にfloat使ってたからって誤差が問題ないなら何も言わない
わざわざ変換を何度もして計算してたら気にするけども、そこまで求められる現場もそう多くないのでは
325:デフォルトの名無しさん
22/03/28 11:19:15.17 8MPYL/o90.net
>>318
∧_∧ / ̄ ̄ ̄ ̄ ̄
( ´∀`)< オマエモナー
( ) \_____
| | |
(__)_)
326:デフォルトの名無しさん
22/03/28 11:25:55.09 28On/6D6a.net
整数でも他との型を合わせる以外 int を使うし、実数も基本 double でいいのでは
327:デフォルトの名無しさん
22/03/28 11:39:56.75 TN58deSDM.net
遅くても小数以下の精度が重要ならdecimal使え
328:デフォルトの名無しさん
22/03/28 11:48:23.50 VjMRJ3XsM.net
floatは結構簡単に精度の低さが問題として表面化するよ
longとintの比ではない
329:デフォルトの名無しさん
22/03/28 12:15:41.21 TN58deSDM.net
結局のところ、用途次第では
330:デフォルトの名無しさん
22/03/28 14:04:59.59 iWC4w4vVM.net
実際のビジネスシステム構築ではDecimal型使う場合が多い
331:デフォルトの名無しさん
22/03/28 14:21:08.92 9Kb03WZY0.net
そうかなあ。。
332:デフォルトの名無しさん
22/03/28 14:25:47.66 8MPYL/o90.net
精度云々言ってるやつはせめて具体な影響の例も書こうぜ
333:デフォルトの名無しさん
22/03/28 14:27:32.27 3kQaQ/3DM.net
sqlサーバーのnumeric(4,0)とかをEFでモデル作るとdecimalになるけど
お前らそのまま使ってる?
334:デフォルトの名無しさん
22/03/28 14:37:28.69 TgL79h+20.net
>>317
float演算もdouble演算もハードウェアが
335:サポートしてるけどdoubleの方がクロック数消費が多い
336:デフォルトの名無しさん
22/03/28 14:41:13.92 DkKihmtS0.net
参考にどうぞ
MOVSS xmm, [m32] L: [memory dep.] T:0.50c
MOVSD xmm, [m64] L: [memory dep.] T:0.50c
MULSS xmm, xmm L:4.0c T:0.50c
MULSD xmm, xmm L:4.0c T:0.50c
337:デフォルトの名無しさん
22/03/28 14:45:52.84 TgL79h+20.net
Ryzenのdatasheet過去に見たけど今検索しても見つからなくて困ってる
SIMD含め命令の消費クロック数とか全部書いてたのに...
338:デフォルトの名無しさん
22/03/28 14:47:28.95 TuD9lj1za.net
>>327
floatだと日本の人口(1億2550万2290人)すら代入できない
339:デフォルトの名無しさん
22/03/28 14:59:00.88 DkKihmtS0.net
Ryzen 5
MULSS xmm, xmm L:3.0c T:0.50c
MULSD xmm, xmm L:4.0c T:0.50c
Intelより速いですな。
340:デフォルトの名無しさん
22/03/28 15:06:53.09 8MPYL/o90.net
はえー
341:デフォルトの名無しさん
22/03/28 15:46:24.33 PX19Xk7jd.net
C#でNTFSのMFTデータ取得とHDDにセクタ(?)単位で読み書きしたいです。
出来るなら関数とかを教えて欲しいですよろしくお願いします。
342:デフォルトの名無しさん
22/03/28 16:10:41.34 bggr0gZp0.net
YouTube でよく見るけど、
Ryzen は高いけど、Intel 12世代に負けているでしょ?
343:デフォルトの名無しさん
22/03/28 16:15:23.65 DkKihmtS0.net
NVIDIA GeForce RTX 3060
FP32 (float) performance 12.74 TFLOPS
FP64 (double) performance 199.0 GFLOPS (1:64)
344:デフォルトの名無しさん
22/03/28 19:15:33.23 yX/3nbFs0.net
Intel12世代コアで雑にマルチスレッドプログラム動かしても大丈夫だよね?
下手にEコア引くみたいなことは無いと思うけどさ
345:デフォルトの名無しさん
22/03/28 21:00:15.79 dJWBHkZn0.net
AVX-512を有効化して使うことができる石を使っている…だと!?
346:デフォルトの名無しさん
22/03/29 08:08:07.07 D1mnE0bGa.net
プログレスバーを継承したコントロールのOnPaintの中で
base.OnPaint();呼んでもバーの部分は描かれないの?
347:デフォルトの名無しさん
22/03/29 08:48:22.02 xQkhmjZ40.net
試せばいいじゃん
348:デフォルトの名無しさん
22/03/29 10:21:34.64 ET94Xefu0.net
>>340
そもそも OnPaint は呼ばれない
349:デフォルトの名無しさん
22/03/29 10:43:15.31 2DY4nmItM.net
>>340
Reference Source見れば分かるけど、そもそもOnPaint実装してない
値が変わったらSendMessageでPBM_SETPOS送ってるだけ
350:デフォルトの名無しさん
22/03/29 10:52:49.33 MRVYy1310.net
>>335
それはもうC#とか関係なく特権権限でWin32APIでも利用してマニュアルでやるしかない
MFTの構造とかはググれば多分すぐに見つかるだろう
351:デフォルトの名無しさん
22/03/29 22:37:57.81 YOHlvasK0.net
>>328
むしろdecimal以外をつかうなら、それDB側の型が妥当か疑わしいが
352:デフォルトの名無しさん
22/03/30 10:44:05.86 u/rQAHi50.net
>>344
WIN32API 含めて検索したら出てきたKernel32.dllのreadfile/writefileの引数にPHYSICALDRIVE指定したらできそう頑張ってみる、ありがとう。
353:デフォルトの名無しさん
22/03/30 10:44:38.10 u/rQAHi50.net
したらできそうじゃ無くてできるらしいだった
354:デフォルトの名無しさん
22/03/30 12:07:06.02 7T4t4X1P0.net
外部のdll関数にintptr渡して実行する処理(HBitmapにポインタ合わせて投げる)
が複数の上記とは関係ない処理をまたいで有効になっている処理を2,3回繰り返すんですが
メモリリークしてます。
どのようにしたらメモリリーク防げるかおわかりでしたらお教えください。
渡すBitmapとポインタを常に同じメモリ使う様にすれば良い?のかなとは
思うのですがそこらへんのやり方等なにかご存知でしたらご教授くださいm(_ _)m
355:デフォルトの名無しさん
22/03/30 12:17:11.87 3gh732H7M.net
ハンドルの解放わすれてるとかでは?
ループでぶん回すとメモリがリニアに増えてく箇所が無いかとか、まず場所を特定しなさい
356:デフォルトの名無しさん
22/03/30 14:56:51.43 oMfCMBWB0.net
newしたらdelete
getしたらrelease
mallocしたらfree
openしたらclose
すべてチェックするしかないですな。
むしろなぜ対にしてコードを書かないのか謎。あっC#だからか。
357:デフォルトの名無しさん
22/03/30 17:56:20.90 nffiieLqa.net
アンマネージなリソースはガベコレの対象外
358:デフォルトの名無しさん
22/03/30 20:34:58.75 hQhM7AVja.net
アンマネージなリソース使うならIDisposableにしてusing内で使う
>>350みたいなのはやってられん
359:デフォルトの名無しさん
22/03/30 21:44:16.77 oMfCMBWB0.net
さすがgdbでVSを超える男!!
360:デフォルトの名無しさん
22/03/31 10:19:23.23 mHRscCZz0.net
せめてref structだけはデストラクタ書いたらスコープ抜ける所で自動でデストラクタ呼び出ししてもらいたいわ
C++みたいに
まぁC++みたいにコピームーブ禁止にできないから複数回呼ばれちゃうことを考えたらそういう風にはづらいってことなんだろうけど
361:348
22/03/31 10:54:55.91 58En6M9E0.net
ご指摘ありがとうございます。
IntPtrを割り当てたBitmap分のメモリがやはり解放されてないのは特定しました。
gdi32.dllにあるDeleteObjectじゃなきゃ消せないみたいなページ見つけて試してみたら解放されました。お騒がせしましたm(_ _)m