「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、
質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。
なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください
>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。
■関連スレ
C#, C♯, C#相談室 Part93
https://mevius.5ch.net/test/read.cgi/tech/1492818720/
■前スレ
ふらっと C#,C♯,C#(初心者用) Part138
https://mevius.5ch.net/test/read.cgi/tech/1528194762/
■コードを貼る場合は↓を使いましょう。
http://ideone.com/
https://dotnetfiddle.net/
■情報源
https://msdn.microsoft.com/ja-jp/library/gg145045.aspx
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/index
https://msdn.microsoft.com/en-us/library/gg145045.aspx
http://referencesource.microsoft.com/
ふらっと C#,C♯,C#(初心者用) Part139
■ このスレッドは過去ログ倉庫に格納されています
2018/08/05(日) 19:55:44.50ID:tZmoj8I+
234デフォルトの名無しさん
2018/08/28(火) 12:15:17.24ID:psOOFlwe >>228
細かいことよくわかんないけどなんとなくコピペで動くからいいやとVB的に使うならそれでいいけど、
言語を一から体系的に習得しようとするとC#はかなり大変だよ
継続的に進化してるから実感がないかもしれないが、今のC#はもはやメジャーな言語の中ではC++に次いでトップクラスに複雑な部類
細かいことよくわかんないけどなんとなくコピペで動くからいいやとVB的に使うならそれでいいけど、
言語を一から体系的に習得しようとするとC#はかなり大変だよ
継続的に進化してるから実感がないかもしれないが、今のC#はもはやメジャーな言語の中ではC++に次いでトップクラスに複雑な部類
235デフォルトの名無しさん
2018/08/28(火) 12:27:46.49ID:Xl5gotOf 仕事でも趣味でも体系的に一から学ぶとかやっていたら何もできなくなる
自分の必要な部分以外勉強するのはもはや研究者
自分の必要な部分以外勉強するのはもはや研究者
236デフォルトの名無しさん
2018/08/28(火) 12:31:32.32ID:fGWTaV2a C#って、言語仕様で難し目なのはyield, dynamic, awaitくらいな気がする
複数ある実行環境や巨大なフレームワーク、コンパイル後のILの話まで含めたら複雑だと思う
複数ある実行環境や巨大なフレームワーク、コンパイル後のILの話まで含めたら複雑だと思う
237デフォルトの名無しさん
2018/08/28(火) 12:39:40.35ID:wSuYfii2 >>234
具体的に
具体的に
238デフォルトの名無しさん
2018/08/28(火) 13:10:00.14ID:psOOFlwe >>237
たとえば簡単なところでいうと、読み取り専用プロパティの定義には今何種類のバリエーションがあるか知ってる?
int Hoge { get { return 5; } }
int Hoge { get => 5; }
int Hoge => 5;
int Hoge { get; private set; } = 5;
int Hoge { get; } = 5;
これらにどういう違いがあってどういうときにどれを使うべきか初学者向けに説明できる?
たとえば簡単なところでいうと、読み取り専用プロパティの定義には今何種類のバリエーションがあるか知ってる?
int Hoge { get { return 5; } }
int Hoge { get => 5; }
int Hoge => 5;
int Hoge { get; private set; } = 5;
int Hoge { get; } = 5;
これらにどういう違いがあってどういうときにどれを使うべきか初学者向けに説明できる?
239デフォルトの名無しさん
2018/08/28(火) 13:12:12.91ID:H5BH2HV+240デフォルトの名無しさん
2018/08/28(火) 13:14:07.70ID:5WHkkAct C++やったことないから知らないどC++は基本的なことも複雑なイメージ
C#は極めるほど複雑なイメージ
C#は極めるほど複雑なイメージ
241デフォルトの名無しさん
2018/08/28(火) 13:14:21.36ID:5WHkkAct 基本はかんたん
242デフォルトの名無しさん
2018/08/28(火) 13:15:27.95ID:5WHkkAct >>238の例なら初心者は一番上だけ知っとけばいい
243デフォルトの名無しさん
2018/08/28(火) 13:20:49.83ID:onl38Ff8 複雑なことができると学習が困難
すべてを学習すること前提ならそうかもしれん
すべてを学習すること前提ならそうかもしれん
244デフォルトの名無しさん
2018/08/28(火) 13:55:05.69ID:8egnCxzp245デフォルトの名無しさん
2018/08/28(火) 14:22:59.40ID:MmXTTGRL >>244
>volatile がある場合とない場合で動作が変わるコード
難しいんじゃないかなあ
(1) 実行儒所を入れ替える
(2) 変数(メモリ)に直接アクセスしない
みたいな最適化がどういうケースでコンパイラによって行われるか、たぶん誰もよく知らないw
だけでなく、古い記事だけど
http://www.itmedia.co.jp/enterprise/articles/0503/23/news086_4.html
↑にあるように、CPUレベルの最適化はCPUに依存する
>volatile がある場合とない場合で動作が変わるコード
難しいんじゃないかなあ
(1) 実行儒所を入れ替える
(2) 変数(メモリ)に直接アクセスしない
みたいな最適化がどういうケースでコンパイラによって行われるか、たぶん誰もよく知らないw
だけでなく、古い記事だけど
http://www.itmedia.co.jp/enterprise/articles/0503/23/news086_4.html
↑にあるように、CPUレベルの最適化はCPUに依存する
246デフォルトの名無しさん
2018/08/28(火) 14:32:18.53ID:sGx9mZW+ 使ったことなくてググったけどそもそものvolatileに対する理解がなんか違う気がする
http://d.hatena.ne.jp/dotnetmemo/touch/20111023/1319380181
http://d.hatena.ne.jp/dotnetmemo/touch/20111023/1319380181
247デフォルトの名無しさん
2018/08/28(火) 14:33:27.71ID:d5vKjLdu >>125
volitateは「この変数はマルチスレッドで使うよ」と明示することによってシングルスレッドの場合にしか効果的ではないような実行速度の最適化技術を使わせないようにするだけであって、排他制御を自動で行うものではないのでは?
volitateは「この変数はマルチスレッドで使うよ」と明示することによってシングルスレッドの場合にしか効果的ではないような実行速度の最適化技術を使わせないようにするだけであって、排他制御を自動で行うものではないのでは?
248デフォルトの名無しさん
2018/08/28(火) 14:53:49.79ID:8egnCxzp >>245-247
皆さんレスどうもありがとうございます!
>>245
> >volatile がある場合とない場合で動作が変わるコード
> 難しいんじゃないかなあ
ありがとうございます。
ということは逆に言えば、volatile が無いことによって想定外の最適化が行われて
不具合につながること自体が起こりにくいものだと考えてもいいのでしょうか。
ただ仮にそうだとしても、お作法的には複数のスレッドからアクセスされる可能性のある
フィールドはすべてに volatile を付けるべきなのかなとも思うのですが、
CS0420 : volatile フィールドへの参照は、volatile として扱われません。
のような警告がうるさくてあまり volatile をつけたくないときもあるので悩んでしまいます。
皆さんレスどうもありがとうございます!
>>245
> >volatile がある場合とない場合で動作が変わるコード
> 難しいんじゃないかなあ
ありがとうございます。
ということは逆に言えば、volatile が無いことによって想定外の最適化が行われて
不具合につながること自体が起こりにくいものだと考えてもいいのでしょうか。
ただ仮にそうだとしても、お作法的には複数のスレッドからアクセスされる可能性のある
フィールドはすべてに volatile を付けるべきなのかなとも思うのですが、
CS0420 : volatile フィールドへの参照は、volatile として扱われません。
のような警告がうるさくてあまり volatile をつけたくないときもあるので悩んでしまいます。
249デフォルトの名無しさん
2018/08/28(火) 14:54:59.71ID:8egnCxzp >>246
参考ページのご紹介どうもありがとうございます。
実はそのページも読んでみたのですが
> ちなみに後者の記事では実際にvolatileをつけないと問題のあるコードが記載されている。
> 以下のコードをReleaseモードでビルドして、デバッグなしで実行すると終了しない。
> volatile をつける(static volatile bool complete = false;)と正しく終了する。
という記述に反して、私の環境(Win10, .NET Framework 4.7.1)では
volatile がなくても終了してしまうようです。
そもそも私にはそのページのコードと >>125 のコードが本質的に同じものに見えてしまい、
> volatileに対する理解がなんか違う気がする
とおっしゃることの真意が理解できていないのですが、
何かお気づきのことがあれば教えていただけないでしょうか。
>>247
レスありがとうございます。
つまり、volatite の有無で実行速度に差が出ることはあっても
計算結果が変わることはない、ということでしょうか。
そうであるなら気が楽なのですが、いくつかのページやここでの他の方のレスを読むと
どうしても確信が持てずにいます。
参考ページのご紹介どうもありがとうございます。
実はそのページも読んでみたのですが
> ちなみに後者の記事では実際にvolatileをつけないと問題のあるコードが記載されている。
> 以下のコードをReleaseモードでビルドして、デバッグなしで実行すると終了しない。
> volatile をつける(static volatile bool complete = false;)と正しく終了する。
という記述に反して、私の環境(Win10, .NET Framework 4.7.1)では
volatile がなくても終了してしまうようです。
そもそも私にはそのページのコードと >>125 のコードが本質的に同じものに見えてしまい、
> volatileに対する理解がなんか違う気がする
とおっしゃることの真意が理解できていないのですが、
何かお気づきのことがあれば教えていただけないでしょうか。
>>247
レスありがとうございます。
つまり、volatite の有無で実行速度に差が出ることはあっても
計算結果が変わることはない、ということでしょうか。
そうであるなら気が楽なのですが、いくつかのページやここでの他の方のレスを読むと
どうしても確信が持てずにいます。
250デフォルトの名無しさん
2018/08/28(火) 15:45:02.14ID:MmXTTGRL251デフォルトの名無しさん
2018/08/28(火) 16:26:12.47ID:8egnCxzp >>250
レスどうもありがとうございます。やはり、>>249 に書いたような
> volatite の有無で実行速度に差が出ることはあっても
> 計算結果が変わることはない
などということを期待してはいけないということでしょうか。
ただ、volatite が無いとどのような問題が起こるのかを理解していないと、
どのような場面で volatite を使えば確実性の保証が得られるのかも分からず、
結局は、なんとなく気分が悪いから volatite をつけておこう、
というレベルにとどまってしまうように思うのです。
確実である保証がないことを証明するというのは
一種の悪魔の証明なのかもしれませんが、
例えばオーバーフローの危険性を説明するなら
int x = int.MaxValue;
int y = 1;
int z = x + y;
のようなコードを見せればいいですし、
volatite についてもこのようなコードがないものかと期待して
質問させていただいた次第です。
レスどうもありがとうございます。やはり、>>249 に書いたような
> volatite の有無で実行速度に差が出ることはあっても
> 計算結果が変わることはない
などということを期待してはいけないということでしょうか。
ただ、volatite が無いとどのような問題が起こるのかを理解していないと、
どのような場面で volatite を使えば確実性の保証が得られるのかも分からず、
結局は、なんとなく気分が悪いから volatite をつけておこう、
というレベルにとどまってしまうように思うのです。
確実である保証がないことを証明するというのは
一種の悪魔の証明なのかもしれませんが、
例えばオーバーフローの危険性を説明するなら
int x = int.MaxValue;
int y = 1;
int z = x + y;
のようなコードを見せればいいですし、
volatite についてもこのようなコードがないものかと期待して
質問させていただいた次第です。
252デフォルトの名無しさん
2018/08/28(火) 16:40:01.44ID:d5vKjLdu volatie付けないとマルチスレッドだと遅くなるとかじゃないのか?
実行結果が変わるとか困るしそんなことになるならもっと知られてるはずなんだが
実行結果が変わるとか困るしそんなことになるならもっと知られてるはずなんだが
253デフォルトの名無しさん
2018/08/28(火) 16:45:40.99ID:3YXzfPPp >>251
最適化のオプション外してビルドしたら?
保険であるvolatiteが「どのようなときに必要か」はMSも公表していないんだからどうしようもない
volatiteを含んだ上で機能するコードをどうしても書きたいとかなら知らないけど
最適化のオプション外してビルドしたら?
保険であるvolatiteが「どのようなときに必要か」はMSも公表していないんだからどうしようもない
volatiteを含んだ上で機能するコードをどうしても書きたいとかなら知らないけど
254デフォルトの名無しさん
2018/08/28(火) 17:49:00.74ID:YFDGQHp2 保障のようなものでしょ
今はどうか知らないけど
例えば
a=1;
a=1;
a=1;
a=1;
a=1;
みたいなコードがあっても最適化でa=1が一回しか実行されないようにならないで
ちゃんと回数分実行されることの保証
今はどうか知らないけど
例えば
a=1;
a=1;
a=1;
a=1;
a=1;
みたいなコードがあっても最適化でa=1が一回しか実行されないようにならないで
ちゃんと回数分実行されることの保証
255デフォルトの名無しさん
2018/08/28(火) 18:10:01.12ID:YFDGQHp2 憶測で申し訳ないけど
a=calc0(a);
b=calc1(a);
が最終的にアセンブラレベルで
フィールドa = レジスタA
レジスタA =フィールドa
みたいなのが出てきた場合に
シングルスレッドであればあとのレジスタA=aの実行が無駄じゃないかと思って
実行しないとかありうるかもしれない
マルチスレッドならフィールドaが書き変わってる可能性あり
a=calc0(a);
b=calc1(a);
が最終的にアセンブラレベルで
フィールドa = レジスタA
レジスタA =フィールドa
みたいなのが出てきた場合に
シングルスレッドであればあとのレジスタA=aの実行が無駄じゃないかと思って
実行しないとかありうるかもしれない
マルチスレッドならフィールドaが書き変わってる可能性あり
256デフォルトの名無しさん
2018/08/28(火) 18:24:08.22ID:MzYJYWNz257デフォルトの名無しさん
2018/08/28(火) 19:01:48.59ID:5NsMegki >>233
新しいとこ教えてクレメンス
新しいとこ教えてクレメンス
258デフォルトの名無しさん
2018/08/28(火) 19:52:33.60ID:QdKJddNI コンパイラの最適化の問題でしょ?
非同期処理で使うフィールドはいれときゃいいんじゃね
非同期処理で使うフィールドはいれときゃいいんじゃね
259デフォルトの名無しさん
2018/08/28(火) 20:25:43.56ID:M3D05fOs ちなみに「お作法」という言葉を使う人間が書くコードは間違ってます
マメな
マメな
260デフォルトの名無しさん
2018/08/28(火) 20:43:21.83ID:sKgj8tWl261デフォルトの名無しさん
2018/08/29(水) 01:22:33.42ID:4YeISD0k >>251
C#ひいては.NET CILではJITないしAOTのコンパイルにかかる時間など故か
ネイティブC/C++程の最適化は行われないので具体例は難しいかもしれません
ということでネイティブC++(プログラム全体の最適化は無効)を例にしてみると
int n;
int main() {
n = 1;
n = 2;
return NO_ERROR;
}
上記コードは関数内でn = 1時点を参照してないし、最終的にn = 2じゃんという事で
「n = 1;」が削られマシンコードは「mov dword ptr [n], 2」とリターンコードのみに成ったりします
参照の場合においても変数の値を逐一読み込まずレジスタに保持して使い回すかもしれません
これを「volatile int n;」と修飾すれば、そのような最適化は抑制されます
C#コンパイラ(C#→CIL)レベルでは読み書きにvolatile.接頭辞などが付く事になる筈
https://msdn.microsoft.com/ja-jp/library/system.reflection.emit.opcodes.volatile
ECMA-335やJIS X 3016といった言語仕様にも記載されていますが、排他制御云々ではありません
C#ひいては.NET CILではJITないしAOTのコンパイルにかかる時間など故か
ネイティブC/C++程の最適化は行われないので具体例は難しいかもしれません
ということでネイティブC++(プログラム全体の最適化は無効)を例にしてみると
int n;
int main() {
n = 1;
n = 2;
return NO_ERROR;
}
上記コードは関数内でn = 1時点を参照してないし、最終的にn = 2じゃんという事で
「n = 1;」が削られマシンコードは「mov dword ptr [n], 2」とリターンコードのみに成ったりします
参照の場合においても変数の値を逐一読み込まずレジスタに保持して使い回すかもしれません
これを「volatile int n;」と修飾すれば、そのような最適化は抑制されます
C#コンパイラ(C#→CIL)レベルでは読み書きにvolatile.接頭辞などが付く事になる筈
https://msdn.microsoft.com/ja-jp/library/system.reflection.emit.opcodes.volatile
ECMA-335やJIS X 3016といった言語仕様にも記載されていますが、排他制御云々ではありません
262デフォルトの名無しさん
2018/08/29(水) 02:03:21.40ID:Hgs5A/6b つまり、実行結果が変わる場合があるということ?
263デフォルトの名無しさん
2018/08/29(水) 03:59:58.56ID:B+rDuEfA C#のデストラクタってどういう場面で必要なんでしょうか?
ネットの記事で見かけたところ
C++ではコンストラクタとセットでプログラマがマネージする必要があるが
C#ではシステムが自動でやるのであまり重要じゃないとありましたが
イマイチよく分かりませんでした
Win32API関数をマーシャリングして使用したりするとデストラクタは必要でしょうか?
実はそういうプログラムを自作してずっと使用してるのですが
デストラクタを書いてなくても特に問題が発生したことがありません
問題が出ないのはたまたま自分の使用環境が合ってるだけでしょうか?
デストラクタを書かないと具体的にどういう不具合が起こるんでしょうか?
ネットの記事で見かけたところ
C++ではコンストラクタとセットでプログラマがマネージする必要があるが
C#ではシステムが自動でやるのであまり重要じゃないとありましたが
イマイチよく分かりませんでした
Win32API関数をマーシャリングして使用したりするとデストラクタは必要でしょうか?
実はそういうプログラムを自作してずっと使用してるのですが
デストラクタを書いてなくても特に問題が発生したことがありません
問題が出ないのはたまたま自分の使用環境が合ってるだけでしょうか?
デストラクタを書かないと具体的にどういう不具合が起こるんでしょうか?
264デフォルトの名無しさん
2018/08/29(水) 05:59:16.57ID:saiWj2Qp ファイル・データベース・プロセスなどのリソースが解放されないから、
使用メモリサイズがドンドン大きくなっていく
つまり、メモリリーク
使用メモリサイズがドンドン大きくなっていく
つまり、メモリリーク
265デフォルトの名無しさん
2018/08/29(水) 09:22:23.43ID:o37zBcM2266デフォルトの名無しさん
2018/08/29(水) 09:30:37.55ID:SgdWV5FD vmmapを使った方が良いかも
HeapWalkerを使えるようになればなおよし
HeapWalkerを使えるようになればなおよし
267デフォルトの名無しさん
2018/08/29(水) 09:55:10.31ID:o37zBcM2268デフォルトの名無しさん
2018/08/29(水) 21:29:00.98ID:xKUAwzTF C♯にて数あるエクセルファイルの中身を読み取りあれこれしたい時、早く開いて読み取って閉じる方法ってありますか?
269デフォルトの名無しさん
2018/08/29(水) 21:43:41.82ID:bGCoQXPI >>268
何と比較して?
何と比較して?
270デフォルトの名無しさん
2018/08/29(水) 22:02:30.99ID:XA15QLm3271デフォルトの名無しさん
2018/08/29(水) 22:14:58.95ID:dev0xKTh 前提条件やマシン構成で大きく変わるので思いつく手段を全部書いて実測
272デフォルトの名無しさん
2018/08/30(木) 03:48:10.84ID:Aa4o8Duk >>268
バイナリーで読み込むのが最速
バイナリーで読み込むのが最速
273デフォルトの名無しさん
2018/08/30(木) 07:21:13.96ID:oIUtx1rS >>270
@シート名の読み込み。
A指定シートの指定列の読み込み。
B指定シートの指定行の読み込み。
こんな感じのを各エクセルに@〜Bを繰り返し行う。
ネットを参考に見て普通に開いて閉じるだと遅くて...
@シート名の読み込み。
A指定シートの指定列の読み込み。
B指定シートの指定行の読み込み。
こんな感じのを各エクセルに@〜Bを繰り返し行う。
ネットを参考に見て普通に開いて閉じるだと遅くて...
274デフォルトの名無しさん
2018/08/30(木) 09:55:38.76ID:l8OdYu1h275デフォルトの名無しさん
2018/08/30(木) 12:24:59.82ID:8MIxRZMr276デフォルトの名無しさん
2018/08/30(木) 17:27:14.97ID:Cn/2yBNm 質問させてください!
VisualStudio2017のC#Formアプリで自分用のテキストエディタを作ろうとしていて、
「改行した時、一行前の行頭に全角スペースがあった場合次の行頭にも全角スペースを挿入する」
というちょっとした自動インデントのような動作をさせたいのが目的です。
探り探りで一応目的の動作をするコードは書けたのですが、
「KeyUpからエンターキーの場合のみ分岐して座標をひとつ戻してから改行かどうかを確かめて、
行数を調べて一文字切り出してからカーソル位置を戻して比較して……」
をはじめとする行程で相当に回りくどいことをやっているような感覚があるので
もっとスマートな方法はないものかと思い質問に来ました。
どうぞよろしくお願いします。
https://ideone.com/8J7uBK
VisualStudio2017のC#Formアプリで自分用のテキストエディタを作ろうとしていて、
「改行した時、一行前の行頭に全角スペースがあった場合次の行頭にも全角スペースを挿入する」
というちょっとした自動インデントのような動作をさせたいのが目的です。
探り探りで一応目的の動作をするコードは書けたのですが、
「KeyUpからエンターキーの場合のみ分岐して座標をひとつ戻してから改行かどうかを確かめて、
行数を調べて一文字切り出してからカーソル位置を戻して比較して……」
をはじめとする行程で相当に回りくどいことをやっているような感覚があるので
もっとスマートな方法はないものかと思い質問に来ました。
どうぞよろしくお願いします。
https://ideone.com/8J7uBK
277デフォルトの名無しさん
2018/08/30(木) 18:25:03.14ID:iISOYGhU エディタはそんなもん
作るの超めんどい
作るの超めんどい
278デフォルトの名無しさん
2018/08/30(木) 18:56:29.70ID:2QdSuJnz task難しすぎない…?
非同期が難しいのは当然だけどこんな躓いたのc#が初めて
非同期が難しいのは当然だけどこんな躓いたのc#が初めて
279デフォルトの名無しさん
2018/08/30(木) 19:01:33.74ID:16om6f/5 スレッドのシーケンシャル図みたいなのに書き出すといいよ
まあスレッドセーフな構造を理解してるのが大前提だけど
まあスレッドセーフな構造を理解してるのが大前提だけど
280デフォルトの名無しさん
2018/08/30(木) 19:05:11.47ID:syYDPcaO >>278
Taskを使わないと更に難しくなる
Taskを使わないと更に難しくなる
281デフォルトの名無しさん
2018/08/30(木) 19:16:12.27ID:r/TRQYs/ task自体は簡単だと思うけど
async/awaitは誤解したまま使うとハマる
async/awaitは誤解したまま使うとハマる
282デフォルトの名無しさん
2018/08/30(木) 19:19:23.09ID:JgfkbZf2 >>275
いや普通にOSSのライブラリ使えよ
いや普通にOSSのライブラリ使えよ
283デフォルトの名無しさん
2018/08/30(木) 19:25:02.55ID:2+/sJ3kY284デフォルトの名無しさん
2018/08/30(木) 19:34:27.48ID:r/TRQYs/ windowsの仕組み上不定な気がする
285デフォルトの名無しさん
2018/08/30(木) 20:37:16.45ID:4drhoSMA >>276
行頭に全角スペースが入力されたときにフラグ立てる
というのはどうかな
文字列型フラグ変数に行頭に入力された全角スペースを突っ込んでおいて
改行でフラグ変数の値を行頭に挿入とか
行頭全角スペースが削除されたらフラグも空文字列にしないといけないけど
行頭に全角スペースが入力されたときにフラグ立てる
というのはどうかな
文字列型フラグ変数に行頭に入力された全角スペースを突っ込んでおいて
改行でフラグ変数の値を行頭に挿入とか
行頭全角スペースが削除されたらフラグも空文字列にしないといけないけど
286デフォルトの名無しさん
2018/08/30(木) 20:42:40.52ID:2QdSuJnz https://ideone.com/0aD1lJ
>>278で質問したものだけどコードで書いたので下の疑問が正しいのか教えてください
A:ここで並列にダウンロードできているのか?
B:Resultを使うとデッドロックすると聞いたけどawaitしていれば大丈夫?
>>278で質問したものだけどコードで書いたので下の疑問が正しいのか教えてください
A:ここで並列にダウンロードできているのか?
B:Resultを使うとデッドロックすると聞いたけどawaitしていれば大丈夫?
287デフォルトの名無しさん
2018/08/30(木) 21:00:14.61ID:Assw0OKp288デフォルトの名無しさん
2018/08/30(木) 21:07:07.68ID:cD6Bz7+B >>282
ん?
Open XML SDKってOSSなんだが w
https://blogs.technet.microsoft.com/microsoft_office_/2014/06/25/open-xml-sdk-goes-open-source/
ん?
Open XML SDKってOSSなんだが w
https://blogs.technet.microsoft.com/microsoft_office_/2014/06/25/open-xml-sdk-goes-open-source/
289デフォルトの名無しさん
2018/08/30(木) 21:24:36.54ID:VlraDHRu >>288
え、生でそれ使えってか?
え、生でそれ使えってか?
290デフォルトの名無しさん
2018/08/30(木) 21:26:02.80ID:Yh+aUVCO >>286
A: DownloadAsyncが真っ当に実装されていれば並列ダウンロードになる
(真っ当ではない例: 同期的にダウンロードしてTask.FromResult)
B: Task<TResult>.Resultはタスクが終了済みなら即座に値を返すので、デッドロックしない
ちなみにTask<TResult>.WhenAllはTask<TResult[]>を返すから
return (await Task.WhenAll(tasks)).ToList();
でも行けるはず
A: DownloadAsyncが真っ当に実装されていれば並列ダウンロードになる
(真っ当ではない例: 同期的にダウンロードしてTask.FromResult)
B: Task<TResult>.Resultはタスクが終了済みなら即座に値を返すので、デッドロックしない
ちなみにTask<TResult>.WhenAllはTask<TResult[]>を返すから
return (await Task.WhenAll(tasks)).ToList();
でも行けるはず
291デフォルトの名無しさん
2018/08/30(木) 21:26:33.91ID:qGVo2Ysa Open XML SDK生で使ったことあるけど、もうちょっと頑張れなかったのかと言いたい
中のファイルメモリに乗っけてシートごとの並列処理出来るかと思ってたのに全然だし、セルの位置はR1C1限定とかマジで死ねよ
中のファイルメモリに乗っけてシートごとの並列処理出来るかと思ってたのに全然だし、セルの位置はR1C1限定とかマジで死ねよ
292デフォルトの名無しさん
2018/08/30(木) 21:27:27.97ID:jRU2Egdi >>288
Open XML SDKはWordなんかも含むOffice製品全部のSDKちょっと直感的じゃないから
ラッパーで多少はExcel VBAライクなClosedXMLとかNPOIとかの話と思われ
Open XML SDKはWordなんかも含むOffice製品全部のSDKちょっと直感的じゃないから
ラッパーで多少はExcel VBAライクなClosedXMLとかNPOIとかの話と思われ
293デフォルトの名無しさん
2018/08/30(木) 21:27:50.35ID:2+/sJ3kY >>276
まあケチ付けるだけなのもあれなんで
俺ならこうかなあ
無駄なフィールドを作らないために無理矢理ラムダ式使ってるけど本当はこういうのよくないかも
class TextBoxEx:TextBox
{
protected string GetIndent(int line)
{
var s = Lines[line];
var m = Regex.Match(s, @"^[ \t]*");
return m.Value;
}
protected string GetIndent()
{
return GetIndent(CaretLine);
}
public int CaretLine
{
get { return GetLineFromCharIndex(SelectionStart); }
}
まあケチ付けるだけなのもあれなんで
俺ならこうかなあ
無駄なフィールドを作らないために無理矢理ラムダ式使ってるけど本当はこういうのよくないかも
class TextBoxEx:TextBox
{
protected string GetIndent(int line)
{
var s = Lines[line];
var m = Regex.Match(s, @"^[ \t]*");
return m.Value;
}
protected string GetIndent()
{
return GetIndent(CaretLine);
}
public int CaretLine
{
get { return GetLineFromCharIndex(SelectionStart); }
}
294デフォルトの名無しさん
2018/08/30(木) 21:28:10.88ID:2+/sJ3kY protected override void OnKeyDown(KeyEventArgs e)
{
base.OnKeyDown(e);
if(e.KeyCode == Keys.Enter)
{
var indent = GetIndent();
EventHandler eh = null;
eh = (sender, ea) =>
{
TextChanged -= eh;
SelectedText = indent;
};
TextChanged += eh;
}
}
}
{
base.OnKeyDown(e);
if(e.KeyCode == Keys.Enter)
{
var indent = GetIndent();
EventHandler eh = null;
eh = (sender, ea) =>
{
TextChanged -= eh;
SelectedText = indent;
};
TextChanged += eh;
}
}
}
295デフォルトの名無しさん
2018/08/30(木) 21:41:05.42ID:cD6Bz7+B296デフォルトの名無しさん
2018/08/30(木) 21:46:27.28ID:2QdSuJnz297デフォルトの名無しさん
2018/08/30(木) 22:15:02.92ID:jRU2Egdi298デフォルトの名無しさん
2018/08/30(木) 22:26:00.43ID:R+j2ccwX >>282が的外れで意味不明なのが悪いということ
299デフォルトの名無しさん
2018/08/30(木) 23:39:14.89ID:4drhoSMA300デフォルトの名無しさん
2018/08/31(金) 00:01:56.93ID:4iUWs/UZ var config = new ConfigurationBuilder()
.AddEnvironmentVariables(prefix: @"XXX_")
.Build();
services.Configure<MyOptions>(config.GetSection("MyOptions"));
class MyOptions {
public int Foo { get; set; }
public int Bar { get; set; }
}
---env---
export XXX_MYOPTIONS_FOO=1
export XXX_MYOPTIONS_BAR=2
ヒエラルキーを持った設定を環境変数に入れたいのだけどコロンを環境変数の識別子に使うとOSに怒られる
アンダーバーにすれば環境変数をセットできるけど今度はIOptionsパターンがヒエラルキーを認識してくれない
なんかイケてる対処法ないんか?
.AddEnvironmentVariables(prefix: @"XXX_")
.Build();
services.Configure<MyOptions>(config.GetSection("MyOptions"));
class MyOptions {
public int Foo { get; set; }
public int Bar { get; set; }
}
---env---
export XXX_MYOPTIONS_FOO=1
export XXX_MYOPTIONS_BAR=2
ヒエラルキーを持った設定を環境変数に入れたいのだけどコロンを環境変数の識別子に使うとOSに怒られる
アンダーバーにすれば環境変数をセットできるけど今度はIOptionsパターンがヒエラルキーを認識してくれない
なんかイケてる対処法ないんか?
301デフォルトの名無しさん
2018/08/31(金) 00:12:53.87ID:0MAifXJX302デフォルトの名無しさん
2018/08/31(金) 00:14:40.87ID:4ZfpOo1s そんなもんをエディタで編集しようというのが
そもそもの間違い
sedで十分
そもそもの間違い
sedで十分
303デフォルトの名無しさん
2018/08/31(金) 00:18:44.01ID:4ZfpOo1s ギガ単位のファイルなんか
結局検索しないと編集箇所を特定することなんかできない
もしかしてギガ単位のファイルを目視で編集箇所特定してんの
どんだけ頭悪いねんと。。。
結局検索しないと編集箇所を特定することなんかできない
もしかしてギガ単位のファイルを目視で編集箇所特定してんの
どんだけ頭悪いねんと。。。
304276
2018/08/31(金) 03:32:18.34ID:ogs0aMAV >>277
こんなもんなんですね!?
テキスト入力を広げていくだけだから初心者向きだと思って始めたのですが
びっくりです……でも組み上げていくのは楽しい……
>>283 >>293
当方プログラミング3日目ゆえ……読み辛くてすまぬ……すまぬ……
コードありがとうございます!
すでに用意されているものを組み合わせることしか考えてなかったので
Textboxのクラスごと作ってしまう方法は目から鱗でした!
GetLineFromCharIndexメソッドの存在すら知らなかったので
これだけで無限に簡略化できそうな気がします……
本当にありがとうございます、色々弄ってみます!
>>285
既存のファイルを読み込んだ時に改行しやすくするのが目的なので
>>287さんの言うとおり一行一行フラグ立てていく方式は厳しいかなと思いました……!
リアルタイムで少ない文章を入力していくならそのぐらい簡素でも
いいと思うのですけれどね! むずかしい!
おかげで先に進めそうです、ありがとうございましたー!
こんなもんなんですね!?
テキスト入力を広げていくだけだから初心者向きだと思って始めたのですが
びっくりです……でも組み上げていくのは楽しい……
>>283 >>293
当方プログラミング3日目ゆえ……読み辛くてすまぬ……すまぬ……
コードありがとうございます!
すでに用意されているものを組み合わせることしか考えてなかったので
Textboxのクラスごと作ってしまう方法は目から鱗でした!
GetLineFromCharIndexメソッドの存在すら知らなかったので
これだけで無限に簡略化できそうな気がします……
本当にありがとうございます、色々弄ってみます!
>>285
既存のファイルを読み込んだ時に改行しやすくするのが目的なので
>>287さんの言うとおり一行一行フラグ立てていく方式は厳しいかなと思いました……!
リアルタイムで少ない文章を入力していくならそのぐらい簡素でも
いいと思うのですけれどね! むずかしい!
おかげで先に進めそうです、ありがとうございましたー!
305デフォルトの名無しさん
2018/08/31(金) 03:47:24.61ID:ogs0aMAV れんとうしつれいします
いざググって調べてclass TextBoxEXの意味を勘違いしていた事に気付いたため
レス内容は笑い流してあげてください 正しい意味を知って本当に目からウロコでした
ありがとうございました!!
いざググって調べてclass TextBoxEXの意味を勘違いしていた事に気付いたため
レス内容は笑い流してあげてください 正しい意味を知って本当に目からウロコでした
ありがとうございました!!
306デフォルトの名無しさん
2018/08/31(金) 06:16:33.32ID:WaaqYsvL307デフォルトの名無しさん
2018/08/31(金) 06:36:54.02ID:7Lf8QxyM 実質プロプラw
308デフォルトの名無しさん
2018/08/31(金) 07:41:37.25ID:Sw5Wccxa >>304
3日目なら他にやることあるだろ
3日目なら他にやることあるだろ
309デフォルトの名無しさん
2018/08/31(金) 08:23:57.84ID:ogs0aMAV >>308
どんな技術も取り敢えず自分がやりたい事から始めて
壁にぶつかったら都度必要な事を調べていけば上手くなると思っているのですが違うのでしょうか……?
どうにか自力で一応の形にして目的を実現するところまではやって、
本当にそれが正しいのか調べて見つけることができなかったから質問させて頂いた状態なので
他にやる事と言われても何をすればいいのかわからないです、すみません……
どんな技術も取り敢えず自分がやりたい事から始めて
壁にぶつかったら都度必要な事を調べていけば上手くなると思っているのですが違うのでしょうか……?
どうにか自力で一応の形にして目的を実現するところまではやって、
本当にそれが正しいのか調べて見つけることができなかったから質問させて頂いた状態なので
他にやる事と言われても何をすればいいのかわからないです、すみません……
310デフォルトの名無しさん
2018/08/31(金) 08:44:51.07ID:6aCB/3AZ311デフォルトの名無しさん
2018/08/31(金) 12:29:19.65ID:iUPXUGud >>309
それでいいんだよ、そうやって覚えていくのが一番いいと思う
とにかく作ってみないとわからないからね
作る喜びを感じられれば伸びていく
リファクタリングもバージョンアップもどんどん
やってみるのがいいと思う
それでいいんだよ、そうやって覚えていくのが一番いいと思う
とにかく作ってみないとわからないからね
作る喜びを感じられれば伸びていく
リファクタリングもバージョンアップもどんどん
やってみるのがいいと思う
312デフォルトの名無しさん
2018/08/31(金) 13:51:05.81ID:Sw5Wccxa >>309
取説読まずにサポセン電話する迷惑なタイプ
取説読まずにサポセン電話する迷惑なタイプ
313デフォルトの名無しさん
2018/08/31(金) 15:13:11.36ID:ogs0aMAV >>310
な、なるほど! そうすれば一行毎に表示を弄ったりとかの細かい事もできそうですね!
でもリアルタイムで打ち込んだデータを内部に移しながら表示領域に戻して……とやるのは結構
大変そうな気がします。世の高機能テキストエディタはそういった苦労の上に作られているのですね……。
>>311
ありがとうございます、頑張ります!
実際スレに貼って頂いたコードの正規表現命令が通らないことで
Text.RegularExpressionsの存在を知ったりと無知ゆえの見落としも結構あるのですが、
自分の知識と思いつく検索ワードで詰めれるところまでは自分でやって成長していきたいです!
>>312
可能な限り調べきってから問い合わせてはいるのですが
なにぶん取説が広辞苑レベルなので……索引力不足、恐縮です
どうにもならなくなったらまたご迷惑かけます
な、なるほど! そうすれば一行毎に表示を弄ったりとかの細かい事もできそうですね!
でもリアルタイムで打ち込んだデータを内部に移しながら表示領域に戻して……とやるのは結構
大変そうな気がします。世の高機能テキストエディタはそういった苦労の上に作られているのですね……。
>>311
ありがとうございます、頑張ります!
実際スレに貼って頂いたコードの正規表現命令が通らないことで
Text.RegularExpressionsの存在を知ったりと無知ゆえの見落としも結構あるのですが、
自分の知識と思いつく検索ワードで詰めれるところまでは自分でやって成長していきたいです!
>>312
可能な限り調べきってから問い合わせてはいるのですが
なにぶん取説が広辞苑レベルなので……索引力不足、恐縮です
どうにもならなくなったらまたご迷惑かけます
314263
2018/08/31(金) 16:29:19.58ID:vo9ITXw3 先日デストラクタについて教えてもらった者ですが
やはりメモリリークしてましたwww
起動時は6Mくらいだったのが終了時には10Mになってました
少しだったから大きな問題にならなかったってことですorz
でも「実用上は問題無いけどゴミいっぱいまき散らしやがって!」
って怒られますよね・・・
でデストラクタを勉強し始めたのですがさっぱり分からん!
マーシャリングして使ってるAPI関数が問題なんだろうとはわかるけど
どのタイミグで何処でデストラクトするのかとか
IDisposableイベントの発生のさせ方とか
C++から勉強しないとダメかな?
先は長いなあ
やはりメモリリークしてましたwww
起動時は6Mくらいだったのが終了時には10Mになってました
少しだったから大きな問題にならなかったってことですorz
でも「実用上は問題無いけどゴミいっぱいまき散らしやがって!」
って怒られますよね・・・
でデストラクタを勉強し始めたのですがさっぱり分からん!
マーシャリングして使ってるAPI関数が問題なんだろうとはわかるけど
どのタイミグで何処でデストラクトするのかとか
IDisposableイベントの発生のさせ方とか
C++から勉強しないとダメかな?
先は長いなあ
315デフォルトの名無しさん
2018/08/31(金) 16:33:50.31ID:7EVWbyOU いや6M→10Mはメモリリークしてなくても.NETならそんなもんだぞ
長いことモニタしてればわかるけど、フルGCが走れば減る
長いことモニタしてればわかるけど、フルGCが走れば減る
316デフォルトの名無しさん
2018/08/31(金) 16:48:31.15ID:vo9ITXw3317デフォルトの名無しさん
2018/08/31(金) 17:39:33.85ID:cQtmAsyE >>314
つ https://docs.microsoft.com/ja-jp/dotnet/standard/design-guidelines/dispose-pattern
ただし和訳は機械翻訳だから読めるなら英語版おすすめ
WINAPIで取得したリソースはアンマネージリソースだから、上の記事のComplexResourceHolderのように
Dispose(bool disposing)内で、disposingの真偽に関わらずアンマネージリソースを解放するのが正解
あとC++とC#ではどちらもデストラクタという用語はあるが
C++のデストラクタはC#ではDisposeが対応する概念
C#のデストラクタはDisposeし忘れた場合の救済措置
つ https://docs.microsoft.com/ja-jp/dotnet/standard/design-guidelines/dispose-pattern
ただし和訳は機械翻訳だから読めるなら英語版おすすめ
WINAPIで取得したリソースはアンマネージリソースだから、上の記事のComplexResourceHolderのように
Dispose(bool disposing)内で、disposingの真偽に関わらずアンマネージリソースを解放するのが正解
あとC++とC#ではどちらもデストラクタという用語はあるが
C++のデストラクタはC#ではDisposeが対応する概念
C#のデストラクタはDisposeし忘れた場合の救済措置
318デフォルトの名無しさん
2018/08/31(金) 17:43:15.60ID:dU0KocTd >>314
盛大に勘違いしてそうだけど、C#のデストラクタは
そのクラスのインスタンスを利用するプログラマがDisposeを呼ぶコードを
書き忘れた(つまりバグ)場合のフェイルセーフ以上の意味は通常はないっすよ
つまりIDisposableを実装しないなら普通はファイナライザも必要ない
ファイナライザは何か不思議な力でリークを解決してくれるマジックじゃありませんw
初心者がごちゃごちゃ頭の中でくだらないこと考えても意味ないよ
どうせそんなの盛大に間違ってるw
そんな暇があったら理解できなくても少しでもドキュメントを読んだ方がいい
盛大に勘違いしてそうだけど、C#のデストラクタは
そのクラスのインスタンスを利用するプログラマがDisposeを呼ぶコードを
書き忘れた(つまりバグ)場合のフェイルセーフ以上の意味は通常はないっすよ
つまりIDisposableを実装しないなら普通はファイナライザも必要ない
ファイナライザは何か不思議な力でリークを解決してくれるマジックじゃありませんw
初心者がごちゃごちゃ頭の中でくだらないこと考えても意味ないよ
どうせそんなの盛大に間違ってるw
そんな暇があったら理解できなくても少しでもドキュメントを読んだ方がいい
319デフォルトの名無しさん
2018/08/31(金) 18:08:24.51ID:eNdvG/21 SqlConnectionクラスでDB操作するのですが、ACID特性の担保は設計でやるのでしょうか?SqlConnectionとDBMSが隠蔽してくれるのでしょうか?
複数ユーザー利用時のトランザクションのロックとか自力実装する必要があるのかなと思い
複数ユーザー利用時のトランザクションのロックとか自力実装する必要があるのかなと思い
320デフォルトの名無しさん
2018/08/31(金) 20:55:02.11ID:k+Te8Uzr321デフォルトの名無しさん
2018/08/31(金) 21:12:25.67ID:ZwfzJAPn >>316
CLRProfiler使ってちゃんとリークオブジェクトがないか確認してみるといいよ
CLRProfiler使ってちゃんとリークオブジェクトがないか確認してみるといいよ
322デフォルトの名無しさん
2018/08/31(金) 21:47:14.81ID:7EVWbyOU >>319
ACIDはあくまで利用者から見たシステムの性質
一般的なRDBにはACIDを実現するために必要な機能が備わっているが、それを使ってACIDなシステムを作るのはお前自身だ
アトミックなトランザクションを使ったからってお前のアプリのリクエスト処理が勝手にアトミックになる訳じゃないぞ
ACIDはあくまで利用者から見たシステムの性質
一般的なRDBにはACIDを実現するために必要な機能が備わっているが、それを使ってACIDなシステムを作るのはお前自身だ
アトミックなトランザクションを使ったからってお前のアプリのリクエスト処理が勝手にアトミックになる訳じゃないぞ
323デフォルトの名無しさん
2018/08/31(金) 22:28:21.69ID:Is8FvumJ324デフォルトの名無しさん
2018/08/31(金) 22:34:45.87ID:Is8FvumJ >>314
c#は空きメモリに余裕がある時は積極的にメモリの回収をしないから、一見リークしてるように見える。
IDisposeの使い方は単純で、使い終わったら自分でDispose()メソッドを呼ぶだけ。
Dispose()を呼び出し忘れた時のためにデストラクタからも呼ぶように書くけど。
c#は空きメモリに余裕がある時は積極的にメモリの回収をしないから、一見リークしてるように見える。
IDisposeの使い方は単純で、使い終わったら自分でDispose()メソッドを呼ぶだけ。
Dispose()を呼び出し忘れた時のためにデストラクタからも呼ぶように書くけど。
325デフォルトの名無しさん
2018/08/31(金) 22:52:13.57ID:iUPXUGud326デフォルトの名無しさん
2018/08/31(金) 23:52:12.65ID:ETlCxkfg C#のデストラクタはおまじない程度の効果と聞いた
327デフォルトの名無しさん
2018/09/01(土) 01:29:15.12ID:ZVoFY83K デストラーデっていつ発動するんだっけ?
328デフォルトの名無しさん
2018/09/01(土) 09:40:22.35ID:PbkphExB デストラクタはいつ動くかわからないから使い勝手がわるい
329デフォルトの名無しさん
2018/09/01(土) 10:07:42.55ID:aEdJ57k5 そもそも処理が重いので可能なら使わない方が良い
330デフォルトの名無しさん
2018/09/01(土) 12:17:11.69ID:1Fa0uhaD >>323
横から失礼。まったくの素人質問で申し訳ないのですけど
独自コントロールのテキストボックスってKeyDown命令を検知したりして
必要な処理を一つ一つ作っていくんですか?
慣れてきたら挑んでみたいけれど何をどこから調べればいいのかわからないので
そのあたりの仕組みやヒントが学べそうなサイトや教本ってあります……?
横から失礼。まったくの素人質問で申し訳ないのですけど
独自コントロールのテキストボックスってKeyDown命令を検知したりして
必要な処理を一つ一つ作っていくんですか?
慣れてきたら挑んでみたいけれど何をどこから調べればいいのかわからないので
そのあたりの仕組みやヒントが学べそうなサイトや教本ってあります……?
331デフォルトの名無しさん
2018/09/01(土) 12:21:41.75ID:+BAvd4bn >>330
初心者の範疇じゃない
さらに言えば中級者の範疇でもない
c# avalon editorでググればいい
単体でエディタを自作するのは愚かなこと
Visual Studio Codeなどの拡張機能を作るのが正しい
初心者の範疇じゃない
さらに言えば中級者の範疇でもない
c# avalon editorでググればいい
単体でエディタを自作するのは愚かなこと
Visual Studio Codeなどの拡張機能を作るのが正しい
332デフォルトの名無しさん
2018/09/01(土) 12:26:00.33ID:HRxiLrgz オープンソースのコードエディタのソースを見れば参考になるかもね
言語は違うけどVSCodeやEclipseなど
言語は違うけどVSCodeやEclipseなど
333デフォルトの名無しさん
2018/09/01(土) 12:28:04.00ID:RGySrVo/ メモリ解放の部分だけC++で作成して呼び出せないの?
どう呼び出してメモリのどの部分をどう開放させれるのかとか一切しらんけど
どう呼び出してメモリのどの部分をどう開放させれるのかとか一切しらんけど
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 中国の局長は「両手をポケット」で対峙 宣伝戦で国民に示す ★2 [蚤の市★]
- XやChatGPTで広範囲の通信障害 投稿や閲覧できず [蚤の市★]
- 【インバウンド】中国からの“渡航自粛”…ツアー1000人分の直前キャンセル「キャンセル料は免除してくれ」 ことしいっぱいキャンセルに [1ゲットロボ★]
- Xで障害発生 ChatGPTなど各種サービスでも接続不良、Cloudflare障害が広範囲に影響か [冬月記者★]
- 【中国外務省】日中関係悪化は高市氏に責任と名指しで非難… ★4 [BFU★]
- 【サッカー】日本代表、ボリビアに3発快勝 森保監督通算100試合目を飾る…鎌田、町野、中村がゴール [久太郎★]
- 【悲報】SANA、発言撤回拒否 [769931615]
- 嫌儲、復活 [377388547]
- 【悲報】Ankerのお店覗いたらジャップがいっぱい居たんだけど🥺 [616817505]
- 【世界恐慌】日経先物、更に下落!助けて、高市 [219241683]
- ネトウヨ「中国以外からレアアースを買えばいい!」→そもそもレアアースの精製が中国しかできない模様 [931948549]
- 【速報】支那、高市発言に大発狂で「やはり危険な国」と世界にバレるwwwwwwwwwwwwwwwwww [308389511]
