「どんなにくだらない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+
180デフォルトの名無しさん
2018/08/26(日) 13:22:20.16ID:KYhaaDP0 ソースコード丸見えだから、APIキーがどこにあるかわかるよね
そうやって海賊版作れてしまうわけだ
そうやって海賊版作れてしまうわけだ
181デフォルトの名無しさん
2018/08/26(日) 14:46:35.94ID:VBsyc88B 流石にAPIキーを普通に文字列で書くアホはnativeでも居ないだろ。
難読化する。
ソースコードが丸見えだとしても問題無い気はする。どーせnativeでも逆アセンブルするんだし。
カジュアルな対策なら、c#には逆コンパイルされないILコード使って復号ロジック書くべきかと思うな。
ちゃんとやるならドングルかライセンスサーバのどっちかじゃねえかな。
難読化する。
ソースコードが丸見えだとしても問題無い気はする。どーせnativeでも逆アセンブルするんだし。
カジュアルな対策なら、c#には逆コンパイルされないILコード使って復号ロジック書くべきかと思うな。
ちゃんとやるならドングルかライセンスサーバのどっちかじゃねえかな。
182デフォルトの名無しさん
2018/08/26(日) 16:44:19.57ID:Aux3ZmsD nativeと同程度の隠匿で良いならそこだけnativeにすれば良いだけやん
183デフォルトの名無しさん
2018/08/26(日) 16:46:40.21ID:UH8BRHfz oauthのキーなら速攻でばれるし文字列でそのまま書くな。難読かしても意味ねぇし。やるだけ無駄。
184デフォルトの名無しさん
2018/08/26(日) 16:48:17.70ID:7VY92v0a DBのパスワードとかソースに直書きしてるわ
ハッシュにしてもどこで復号すればいいのか
ハッシュにしてもどこで復号すればいいのか
185デフォルトの名無しさん
2018/08/26(日) 17:33:04.42ID:Lq+jppE1 自前でやるだけのセキュリティのスキルがあるとこは珍しい
素直にASP.NET Identity + IdentityServerでOIDC使っとくのが懸命な判断
素直にASP.NET Identity + IdentityServerでOIDC使っとくのが懸命な判断
186デフォルトの名無しさん
2018/08/26(日) 17:45:57.13ID:6lhNHki6 こういう大事な部分を手軽で強固なセキュリティとしてなんでMSは用意しておかないんだ?
187デフォルトの名無しさん
2018/08/26(日) 17:47:36.13ID:vKa62JvF はい意味不明
OIDCってアプリ側がユーザーの認証認可をする仕組みだぞ?
それをどうクライアントアプリのAPIキーの隠蔽に使うのか教えてくれ
OIDCってアプリ側がユーザーの認証認可をする仕組みだぞ?
それをどうクライアントアプリのAPIキーの隠蔽に使うのか教えてくれ
188デフォルトの名無しさん
2018/08/26(日) 17:47:37.20ID:86UvKUWS >>186
もうすでにC#関係なくなっているが手軽で強固なやり方ってどんなことよ?
もうすでにC#関係なくなっているが手軽で強固なやり方ってどんなことよ?
189デフォルトの名無しさん
2018/08/26(日) 17:49:20.77ID:vKa62JvF190デフォルトの名無しさん
2018/08/26(日) 17:49:59.20ID:6lhNHki6 まあそれよりもソースを復元できるのが問題だわな
191デフォルトの名無しさん
2018/08/26(日) 17:50:52.91ID:O9adGcKd192デフォルトの名無しさん
2018/08/26(日) 17:51:50.11ID:86UvKUWS >>190
中間言語形式だけでなくスクリプト言語も否定する気かw
中間言語形式だけでなくスクリプト言語も否定する気かw
193デフォルトの名無しさん
2018/08/26(日) 17:54:18.49ID:Lq+jppE1 >>187
チュートリアルもやったことないのかよ…
チュートリアルもやったことないのかよ…
194デフォルトの名無しさん
2018/08/26(日) 17:56:14.36ID:vKa62JvF195デフォルトの名無しさん
2018/08/26(日) 17:57:02.40ID:6lhNHki6 >>192
サーバー型はビジネスロジックがサーバー内にあるからそこで防げるけど、c#アプリは無理じゃん
サーバー型はビジネスロジックがサーバー内にあるからそこで防げるけど、c#アプリは無理じゃん
196デフォルトの名無しさん
2018/08/26(日) 18:00:17.07ID:O9adGcKd197デフォルトの名無しさん
2018/08/26(日) 18:02:46.79ID:6lhNHki6 >>196
UWPじゃなくFormアプリでおねがい
UWPじゃなくFormアプリでおねがい
198デフォルトの名無しさん
2018/08/26(日) 18:04:53.73ID:vKa62JvF >>196
これユーザーが入力した認証情報を安全に保持するのと、サーバー側のリソースに関するユーザーの認証認可をする話だよね
開発者の機密情報を安全にクライアントに持たせるのとは全く別の問題だよ(そしてそれは原理的に不可能)
これユーザーが入力した認証情報を安全に保持するのと、サーバー側のリソースに関するユーザーの認証認可をする話だよね
開発者の機密情報を安全にクライアントに持たせるのとは全く別の問題だよ(そしてそれは原理的に不可能)
199198
2018/08/26(日) 18:15:55.92ID:vKa62JvF もちろんクライアント側で復号する必要がなくて、単にデータストアをクライアント側に置きたいだけなら、サーバー側で暗号化すればいいだけだよ
原理的に不可能なのはクライアント側でも機密情報を復号して使う必要がある場合の話ね
原理的に不可能なのはクライアント側でも機密情報を復号して使う必要がある場合の話ね
200デフォルトの名無しさん
2018/08/26(日) 18:22:46.80ID:wR7TFJf0 こんな解説しないと分からないってのが信じられん
201デフォルトの名無しさん
2018/08/26(日) 18:40:28.29ID:O9adGcKd >>198
だから「それなり」って書いてあるだろ
だから「それなり」って書いてあるだろ
202デフォルトの名無しさん
2018/08/26(日) 23:06:54.05ID:BDbiNYg/ Dapperを使用するにあたり、下記の「DAO」クラスの「SelectDAO」メソッドの
戻り値を抽象的に表現できれば、SQL与えるだけで共通に使えるのになと思っているのですが
戻り値を下記のList<IAB>のように書く方法はあるでしょうか?
interface IAB{ }
public class A : IAB { public string nen{ get; set; } }
public class B : IAB { public string nen{ get; set; } }
public class DAO
{
public List<IAB> SelectDAO(string sql)
{
System.Data.IDbConnection _con = new SqlConnection("接続文字列");
return (List<IAB>)_con.Query<IAB>(sql);//DynamicMethodに対する型オーナーが無効です。
と怒られます。
}
}
戻り値を抽象的に表現できれば、SQL与えるだけで共通に使えるのになと思っているのですが
戻り値を下記のList<IAB>のように書く方法はあるでしょうか?
interface IAB{ }
public class A : IAB { public string nen{ get; set; } }
public class B : IAB { public string nen{ get; set; } }
public class DAO
{
public List<IAB> SelectDAO(string sql)
{
System.Data.IDbConnection _con = new SqlConnection("接続文字列");
return (List<IAB>)_con.Query<IAB>(sql);//DynamicMethodに対する型オーナーが無効です。
と怒られます。
}
}
203デフォルトの名無しさん
2018/08/26(日) 23:10:18.71ID:iDr2keD8 >>202
いやSQLを隠蔽するのがDAOなのにSQL渡したらダメだろ…
いやSQLを隠蔽するのがDAOなのにSQL渡したらダメだろ…
204デフォルトの名無しさん
2018/08/26(日) 23:12:59.95ID:hANAm2gW ようするにdaoなんか使わずに
odbc使いなさいということ
odbc使いなさいということ
205デフォルトの名無しさん
2018/08/26(日) 23:15:38.55ID:qu/vhMXg >>204
ODBCだなんて何十年前の話だよ…
ODBCだなんて何十年前の話だよ…
206デフォルトの名無しさん
2018/08/26(日) 23:26:06.62ID:HvpvLn4I207デフォルトの名無しさん
2018/08/26(日) 23:30:34.69ID:BDbiNYg/208デフォルトの名無しさん
2018/08/26(日) 23:32:55.01ID:acagJbyI API抜かれるってどのシーンで警戒してるの?サーバー上でアプリ起動してるとき?
209デフォルトの名無しさん
2018/08/26(日) 23:33:30.52ID:8W/FdQms 5chせんぶら
210デフォルトの名無しさん
2018/08/27(月) 10:42:42.81ID:YXkmN521 >>202
最終的にDapperも何らかのインスタンスをnewしないといけないのに
IABだけ渡されても何作ればいいのか分からないだろ
素直に
public List<T> SelectDAO<T>(string sql) where T : IAB
とかに
というかSelectDAOを呼び出した側はメンバの存在しないIABを使って何をすればいいのか
最終的にDapperも何らかのインスタンスをnewしないといけないのに
IABだけ渡されても何作ればいいのか分からないだろ
素直に
public List<T> SelectDAO<T>(string sql) where T : IAB
とかに
というかSelectDAOを呼び出した側はメンバの存在しないIABを使って何をすればいいのか
211デフォルトの名無しさん
2018/08/27(月) 13:05:39.06ID:97nSTlug >>207
いやそういう問題じゃなくて、SQLを書くんだったらDAOの中で書くんだよ
外からSelectクエリを文字列で受け取るってそれ使う側がDBのテーブル構造を知ってないとできないだろ
データストアの詳細を全く隠蔽できてない
いやそういう問題じゃなくて、SQLを書くんだったらDAOの中で書くんだよ
外からSelectクエリを文字列で受け取るってそれ使う側がDBのテーブル構造を知ってないとできないだろ
データストアの詳細を全く隠蔽できてない
212デフォルトの名無しさん
2018/08/27(月) 13:51:51.69ID:eRxM3k20 Dapperの実装ってこんな大変だったのか
213デフォルトの名無しさん
2018/08/27(月) 17:39:21.68ID:dQ3pJlXI214デフォルトの名無しさん
2018/08/27(月) 20:08:24.29ID:LmPAdMN0 VS2017WindowsFormsAppの実行ファイルを作成したのですが、
実行ファイルをzip圧縮するとサイズが10分の1以下になります
小さくなりすぎな気がするのですが正常の範囲で問題ありませんでしょうか?
または、実行ファイルが肥大?(余分な情報が含まれている等)していたりするのでしょうか?
なにかVS上で出来ることはありますか?
実行ファイルをzip圧縮するとサイズが10分の1以下になります
小さくなりすぎな気がするのですが正常の範囲で問題ありませんでしょうか?
または、実行ファイルが肥大?(余分な情報が含まれている等)していたりするのでしょうか?
なにかVS上で出来ることはありますか?
215デフォルトの名無しさん
2018/08/27(月) 20:15:33.37ID:RlI7Tzg3216デフォルトの名無しさん
2018/08/27(月) 20:39:37.08ID:liNpwcvg プログラミング初心者です
visual studio for mac2017をインストールしてC#を覚えたいんだけど、どうやって学習したらいいのか教えてください!
探してもなかなかいい日本語の学習動画やサイトがなくて、、、
visual studio for mac2017をインストールしてC#を覚えたいんだけど、どうやって学習したらいいのか教えてください!
探してもなかなかいい日本語の学習動画やサイトがなくて、、、
217デフォルトの名無しさん
2018/08/27(月) 20:46:49.73ID:lvpUeXXJ 未確認飛行が定番じゃないかね
218デフォルトの名無しさん
2018/08/27(月) 21:10:56.77ID:LmPAdMN0 >>215
ありがとうございます
1MBほどのファイルが80KBほどになるので、小さくなりすぎではないかと思いまして…
生成される実行ファイルが、プロジェクトのある時点から1MBほどに大きくなったような記憶もあります
読み込み差し替えした画像リソースが上手く外れていないのかなと想像したりしますが…
もうちょっと色々自分で調査してみます
ありがとうございます
1MBほどのファイルが80KBほどになるので、小さくなりすぎではないかと思いまして…
生成される実行ファイルが、プロジェクトのある時点から1MBほどに大きくなったような記憶もあります
読み込み差し替えした画像リソースが上手く外れていないのかなと想像したりしますが…
もうちょっと色々自分で調査してみます
219デフォルトの名無しさん
2018/08/27(月) 21:15:57.46ID:RlI7Tzg3220デフォルトの名無しさん
2018/08/27(月) 22:15:24.67ID:SLuEHwvX >>219
コードは5000行ほどですね。試しにプロジェクトを新規で作り直して中身を移し替えてみます
エクスポートインポート的なのがあれば良いのですがVS標準ではないみたいなので
大変ですが手動でやるしかないですが
コードは5000行ほどですね。試しにプロジェクトを新規で作り直して中身を移し替えてみます
エクスポートインポート的なのがあれば良いのですがVS標準ではないみたいなので
大変ですが手動でやるしかないですが
221デフォルトの名無しさん
2018/08/27(月) 22:26:04.85ID:liNpwcvg >>217
ありがとうございます!!!
ありがとうございます!!!
222デフォルトの名無しさん
2018/08/27(月) 22:36:37.03ID:HUaFIhtM >>217
あそこほんと神
あそこほんと神
223デフォルトの名無しさん
2018/08/27(月) 23:34:18.00ID:nPk8x20U OSデフォルト環境だとsn.exeがインストールされてないのか
隔離環境で作ったアセンブリにストロングネームつけたい時ってみんなどうしてんだ?
隔離環境で作ったアセンブリにストロングネームつけたい時ってみんなどうしてんだ?
224デフォルトの名無しさん
2018/08/27(月) 23:53:32.54ID:E9g9LiKW225デフォルトの名無しさん
2018/08/27(月) 23:57:11.03ID:rJOuuZ33 まあそうだね
C#でプログラミング入門って正直キツいと思うし、そういうコンセプトのところは
たぶんないんじゃないか
C#でプログラミング入門って正直キツいと思うし、そういうコンセプトのところは
たぶんないんじゃないか
226デフォルトの名無しさん
2018/08/27(月) 23:58:55.68ID:m5aHtIH2227デフォルトの名無しさん
2018/08/28(火) 00:04:55.80ID:5gce9PvO プログラミングはDelphi6からだったなー
\5,000でパッケージを買ったすぐ後に、無料版のDL提供が始まった思い出
高校生にとって\5,000は地味に痛かった……
\5,000でパッケージを買ったすぐ後に、無料版のDL提供が始まった思い出
高校生にとって\5,000は地味に痛かった……
228デフォルトの名無しさん
2018/08/28(火) 00:10:26.77ID:ym/+5T0Q229デフォルトの名無しさん
2018/08/28(火) 00:11:23.06ID:9uK3R3xF Androidもjavaのコンパイル通すだけなら
230デフォルトの名無しさん
2018/08/28(火) 00:36:01.05ID:a3yKcaCh 英語得意ではなくてプログラミング言語の経験が全くないのなら
本を買う方がいいような気もする・・
本を買う方がいいような気もする・・
231デフォルトの名無しさん
2018/08/28(火) 03:46:31.78ID:CqD+kceR 猫でも判るで十分じゃね
232デフォルトの名無しさん
2018/08/28(火) 07:03:31.88ID:CaCX57FK 神サイトはどぼんでしょ
あのサイトのコピペがC#する日本ITドカタを支えてる
あのサイトのコピペがC#する日本ITドカタを支えてる
233デフォルトの名無しさん
2018/08/28(火) 07:14:31.08ID:TOj+sTb1 そこもう情報が古くね
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 スレッドのシーケンシャル図みたいなのに書き出すといいよ
まあスレッドセーフな構造を理解してるのが大前提だけど
まあスレッドセーフな構造を理解してるのが大前提だけど
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 中国外務省局長 「ポケットに手を入れていたのは寒いから」 日本との局長級会談で [お断り★]
- 【速報】中国外務省報道官 高市首相発言撤回なければ「断固たる対抗措置」 ★3 [蚤の市★]
- 高市首相答弁を“引き出した”立民・岡田克也氏が改めて説明「なぜ慎重な答弁をされなかったのか。非常に残念に思っている」 ★7 [ぐれ★]
- 中国、日本行き“50万人”キャンセル 渡航自粛でコロナ禍以来最大 ★3 [お断り★]
- 【国際】ロシアはすでに戦争準備段階――ポーランド軍トップが警告 [ぐれ★]
- 【速報】日本産牛肉の対中国輸出再開協議が中止 ★2 [おっさん友の会★]
- 【実況】博衣こよりのえちえちフログロ学力テスト🧪★4
- 【実況】博衣こよりのえちえちフログロ学力テスト🧪★3
- 【高市早苗】習近平、本気で激おこ [115996789]
- 【高市有事】高市早苗が就任一ヶ月でやったこと一覧wwwwwwwwwwwwwww [603416639]
- 【有事】高市、🥺麻生太郎に言わされただけだった。悲しいお人形やね…😢 [153490809]
- 高市早苗「中国が戦艦を使ったら存立危機事態」佐藤優氏「戦艦なんて時代遅れの艦船を持ってる訳ねーだろ」 [931948549]
