1 名前:デフォルトの名無しさん mailto:sage [2018/08/05(日) 19:55:44.50 ID:tZmoj8I+.net] 「どんなにくだらない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/ ■コードを貼る場合は↓を使いましょう。 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 referencesource.microsoft.com/
209 名前:デフォルトの名無しさん [2018/08/26(日) 23:06:54.05 ID:BDbiNYg/.net] 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に対する型オーナーが無効です。 と怒られます。 } }
210 名前:デフォルトの名無しさん mailto:sage [2018/08/26(日) 23:10:18.71 ID:iDr2keD8.net] >>202 いやSQLを隠蔽するのがDAOなのにSQL渡したらダメだろ…
211 名前:デフォルトの名無しさん [2018/08/26(日) 23:12:59.95 ID:hANAm2gW.net] ようするにdaoなんか使わずに odbc使いなさいということ
212 名前:デフォルトの名無しさん mailto:sage [2018/08/26(日) 23:15:38.55 ID:qu/vhMXg.net] >>204 ODBCだなんて何十年前の話だよ…
213 名前:デフォルトの名無しさん mailto:sage [2018/08/26(日) 23:26:06.62 ID:HvpvLn4I.net] >>202 戻す値をList<dynamics>にすることで解決します。 マジオススメ
214 名前:デフォルトの名無しさん mailto:sage [2018/08/26(日) 23:30:34.69 ID:BDbiNYg/.net] >>203 Dapperは緩いORMでクエリは書く必要あるんです EntityFrameworkなら確かに悩む必要無い問題な気がします
215 名前:デフォルトの名無しさん [2018/08/26(日) 23:32:55.01 ID:acagJbyI.net] API抜かれるってどのシーンで警戒してるの?サーバー上でアプリ起動してるとき?
216 名前:デフォルトの名無しさん mailto:sage [2018/08/26(日) 23:33:30.52 ID:8W/FdQms.net] 5chせんぶら
217 名前:デフォルトの名無しさん mailto:sage [2018/08/27(月) 10:42:42.81 ID:YXkmN521.net] >>202 最終的にDapperも何らかのインスタンスをnewしないといけないのに IABだけ渡されても何作ればいいのか分からないだろ 素直に public List<T> SelectDAO<T>(string sql) where T : IAB とかに というかSelectDAOを呼び出した側はメンバの存在しないIABを使って何をすればいいのか
218 名前:デフォルトの名無しさん mailto:sage [2018/08/27(月) 13:05:39.06 ID:97nSTlug.net] >>207 いやそういう問題じゃなくて、SQLを書くんだったらDAOの中で書くんだよ 外からSelectクエリを文字列で受け取るってそれ使う側がDBのテーブル構造を知ってないとできないだろ データストアの詳細を全く隠蔽できてない
219 名前:デフォルトの名無しさん [2018/08/27(月) 13:51:51.69 ID:eRxM3k20.net] Dapperの実装ってこんな大変だったのか
220 名前:デフォルトの名無しさん mailto:sage [2018/08/27(月) 17:39:21.68 ID:dQ3pJlXI.net] >>211 1知識1DAOクラスが本来の姿という事でしょうか? 実装レベルでもうちょっと抽象化できるかと思ったのですが設計レベルでは好ましく無いとなれば深追いは不要ですね
221 名前:デフォルトの名無しさん [2018/08/27(月) 20:08:24.29 ID:LmPAdMN0.net] VS2017WindowsFormsAppの実行ファイルを作成したのですが、 実行ファイルをzip圧縮するとサイズが10分の1以下になります 小さくなりすぎな気がするのですが正常の範囲で問題ありませんでしょうか? または、実行ファイルが肥大?(余分な情報が含まれている等)していたりするのでしょうか? なにかVS上で出来ることはありますか?
222 名前:デフォルトの名無しさん mailto:sage [2018/08/27(月) 20:15:33.37 ID:RlI7Tzg3.net] >>21
223 名前:4 使用しないのならデバッグ情報とか埋め込まれるマニフェストとか外せるけどそれは肥大するほどでもない どんな実行ファイルか見てみないと分からないし解凍しても動くのなら気にしなくてもいいのでは [] [ここ壊れてます]
224 名前:デフォルトの名無しさん [2018/08/27(月) 20:39:37.08 ID:liNpwcvg.net] プログラミング初心者です visual studio for mac2017をインストールしてC#を覚えたいんだけど、どうやって学習したらいいのか教えてください! 探してもなかなかいい日本語の学習動画やサイトがなくて、、、
225 名前:デフォルトの名無しさん mailto:sage [2018/08/27(月) 20:46:49.73 ID:lvpUeXXJ.net] 未確認飛行が定番じゃないかね
226 名前:デフォルトの名無しさん mailto:sage [2018/08/27(月) 21:10:56.77 ID:LmPAdMN0.net] >>215 ありがとうございます 1MBほどのファイルが80KBほどになるので、小さくなりすぎではないかと思いまして… 生成される実行ファイルが、プロジェクトのある時点から1MBほどに大きくなったような記憶もあります 読み込み差し替えした画像リソースが上手く外れていないのかなと想像したりしますが… もうちょっと色々自分で調査してみます
227 名前:デフォルトの名無しさん mailto:sage [2018/08/27(月) 21:15:57.46 ID:RlI7Tzg3.net] >>216 念のため書いておくけどMac版はWinフォームやWPF作れないからな >>218 コード中心で1MBくらいになるのは数万行のものだから、そんな縮むのは間違いなく画像リソースだろうな BMP形式で入っているとかアイコンが多いとかならZIPでもかなり縮む
228 名前:デフォルトの名無しさん mailto:sage [2018/08/27(月) 22:15:24.67 ID:SLuEHwvX.net] >>219 コードは5000行ほどですね。試しにプロジェクトを新規で作り直して中身を移し替えてみます エクスポートインポート的なのがあれば良いのですがVS標準ではないみたいなので 大変ですが手動でやるしかないですが
229 名前:デフォルトの名無しさん [2018/08/27(月) 22:26:04.85 ID:liNpwcvg.net] >>217 ありがとうございます!!!
230 名前:デフォルトの名無しさん mailto:sage [2018/08/27(月) 22:36:37.03 ID:HUaFIhtM.net] >>217 あそこほんと神
231 名前:デフォルトの名無しさん mailto:sage [2018/08/27(月) 23:34:18.00 ID:nPk8x20U.net] OSデフォルト環境だとsn.exeがインストールされてないのか 隔離環境で作ったアセンブリにストロングネームつけたい時ってみんなどうしてんだ?
232 名前:デフォルトの名無しさん mailto:sage [2018/08/27(月) 23:53:32.54 ID:E9g9LiKW.net] >>217 >>222 未確認ってどちらかというと入門じゃなくて確認用途だと思うよ あれを見て判る人はすでにjavaなどの他の言語を習得してる
233 名前:デフォルトの名無しさん mailto:sage [2018/08/27(月) 23:57:11.03 ID:rJOuuZ33.net] まあそうだね C#でプログラミング入門って正直キツいと思うし、そういうコンセプトのところは たぶんないんじゃないか
234 名前:デフォルトの名無しさん mailto:sage [2018/08/27(月) 23:58:55.68 ID:m5aHtIH2.net] >>225 俺は「C#の絵本」でプログラミング入門した。 つまり、C#でプログラミング入門した
235 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 00:04:55.80 ID:5gce9PvO.net] プログラミングはDelphi6からだったなー \5,000でパッケージを買ったすぐ後に、無料版のDL提供が始まった思い出 高校生にとって\5,000は地味に痛かった……
236 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 00:10:26.77 ID:ym/+5T0Q.net] >>225 何がそんなにキツい? Windows Formsのぽとペタ以上に初心者に優しいのってなんだろ
237 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 00:11:23.06 ID:9uK3R3xF.net] Androidもjavaのコンパイル通すだけなら
238 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 00:36:01.05 ID:a3yKcaCh.net] 英語得意ではなくてプログラミング言語の経験が全くないのなら 本を買う方がいいような気もする・・
239 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 03:46:31.78 ID:CqD+kceR.net] 猫でも判るで十分じゃね
240 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 07:03:31.88 ID:CaCX57FK.net] 神サイトはどぼんでしょ あのサイトのコピペがC#する日本ITドカタを支えてる
241 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 07:14:31.08 ID:TOj+sTb1.net] そこもう情報が古くね
242 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 12:15:17.24 ID:psOOFlwe.net] >>228 細かいことよくわかんないけどなんとなくコピペで動くからいいやとVB的に使うならそれでいいけど、 言語を一から体系的に習得しようとするとC#はかなり大変だよ 継続的に進化してるから実感がないかもしれないが、今のC#はもはやメジャーな言語の中ではC++に次いでトップクラスに複雑な部類
243 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 12:27:46.49 ID:Xl5gotOf.net] 仕事でも趣味でも体系的に一から学ぶとかやっていたら何もできなくなる 自分の必要な部分以外勉強するのはもはや研究者
244 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 12:31:32.32 ID:fGWTaV2a.net] C#って、言語仕様で難し目なのはyield, dynamic, awaitくらいな気がする 複数ある実行環境や巨大なフレームワーク、コンパイル後のILの話まで含めたら複雑だと思う
245 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 12:39:40.35 ID:wSuYfii2.net] >>234 具体的に
246 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 13:10:00.14 ID:psOOFlwe.net] >>237 たとえば簡単なところでいうと、読み取り専用プロパティの定義には今何種類のバリエーションがあるか知ってる? int Hoge { get { return 5; } } int Hoge { get => 5; } int Hoge => 5; int Hoge { get; private set; } = 5; int Hoge { get; } = 5; これらにどういう違いがあってどういうときにどれを使うべきか初学者向けに説明できる?
247 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 13:12:12.91 ID:H5BH2HV+.net] >>238 どれでもいいじゃん まずは動けばいいんだよ バグる?そんなのバグったときに対応すればいい どうせ世の中のほとんどのアプリがバグだらけなんだし そしてそのバグ取り経験が学習にもなる
248 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 13:14:07.70 ID:5WHkkAct.net] C++やったことないから知らないどC++は基本的なことも複雑なイメージ C#は極めるほど複雑なイメージ
249 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 13:14:21.36 ID:5WHkkAct.net] 基本はかんたん
250 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 13:15:27.95 ID:5WHkkAct.net] >>238 の例なら初心者は一番上だけ知っとけばいい
251 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 13:20:49.83 ID:onl38Ff8.net] 複雑なことができると学習が困難 すべてを学習すること前提ならそうかもしれん
252 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 13:55:05.69 ID:8egnCxzp.net] >>236 >>125 でも質問させていただいたのですが、 yield, dynamic, await あたりは理解できているつもりであるものの volatile の役割がどうしても理解できません。 慣れている方にとっては当たり前のことなのかもしれませんが、 volatile がある場合とない場合で動作が変わるコードの例だけでも お教えいただけないでしょうか。 どうぞよろしくお願いいたします。
253 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 14:22:59.40 ID:MmXTTGRL.net] >>244 >volatile がある場合とない場合で動作が変わるコード 難しいんじゃないかなあ (1) 実行儒所を入れ替える (2) 変数(メモリ)に直接アクセスしない みたいな最適化がどういうケースでコンパイラによって行われるか、たぶん誰もよく知らないw だけでなく、古い記事だけど www.itmedia.co.jp/enterprise/articles/0503/23/news086_4.html ↑にあるように、CPUレベルの最適化はCPUに依存する
254 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 14:32:18.53 ID:sGx9mZW+.net] 使ったことなくてググったけどそもそものvolatileに対する理解がなんか違う気がする d.hatena.ne.jp/dotnetmemo/touch/20111023/1319380181
255 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 14:33:27.71 ID:d5vKjLdu.net] >>125 volitateは「この変数はマルチスレッドで使うよ」と明示することによってシングルスレッドの場合
256 名前:ノしか効果的ではないような実行速度の最適化技術を使わせないようにするだけであって、排他制御を自動で行うものではないのでは? [] [ここ壊れてます]
257 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 14:53:49.79 ID:8egnCxzp.net] >>245-247 皆さんレスどうもありがとうございます! >>245 > >volatile がある場合とない場合で動作が変わるコード > 難しいんじゃないかなあ ありがとうございます。 ということは逆に言えば、volatile が無いことによって想定外の最適化が行われて 不具合につながること自体が起こりにくいものだと考えてもいいのでしょうか。 ただ仮にそうだとしても、お作法的には複数のスレッドからアクセスされる可能性のある フィールドはすべてに volatile を付けるべきなのかなとも思うのですが、 CS0420 : volatile フィールドへの参照は、volatile として扱われません。 のような警告がうるさくてあまり volatile をつけたくないときもあるので悩んでしまいます。
258 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 14:54:59.71 ID:8egnCxzp.net] >>246 参考ページのご紹介どうもありがとうございます。 実はそのページも読んでみたのですが > ちなみに後者の記事では実際にvolatileをつけないと問題のあるコードが記載されている。 > 以下のコードをReleaseモードでビルドして、デバッグなしで実行すると終了しない。 > volatile をつける(static volatile bool complete = false;)と正しく終了する。 という記述に反して、私の環境(Win10, .NET Framework 4.7.1)では volatile がなくても終了してしまうようです。 そもそも私にはそのページのコードと >>125 のコードが本質的に同じものに見えてしまい、 > volatileに対する理解がなんか違う気がする とおっしゃることの真意が理解できていないのですが、 何かお気づきのことがあれば教えていただけないでしょうか。 >>247 レスありがとうございます。 つまり、volatite の有無で実行速度に差が出ることはあっても 計算結果が変わることはない、ということでしょうか。 そうであるなら気が楽なのですが、いくつかのページやここでの他の方のレスを読むと どうしても確信が持てずにいます。
259 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 15:45:02.14 ID:MmXTTGRL.net] >>248 確実である保証がないものに確実性の保証を与えるvolatileを「お作法」 と思う発想は100%間違っています
260 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 16:26:12.47 ID:8egnCxzp.net] >>250 レスどうもありがとうございます。やはり、>>249 に書いたような > volatite の有無で実行速度に差が出ることはあっても > 計算結果が変わることはない などということを期待してはいけないということでしょうか。 ただ、volatite が無いとどのような問題が起こるのかを理解していないと、 どのような場面で volatite を使えば確実性の保証が得られるのかも分からず、 結局は、なんとなく気分が悪いから volatite をつけておこう、 というレベルにとどまってしまうように思うのです。 確実である保証がないことを証明するというのは 一種の悪魔の証明なのかもしれませんが、 例えばオーバーフローの危険性を説明するなら int x = int.MaxValue; int y = 1; int z = x + y; のようなコードを見せればいいですし、 volatite についてもこのようなコードがないものかと期待して 質問させていただいた次第です。
261 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 16:40:01.44 ID:d5vKjLdu.net] volatie付けないとマルチスレッドだと遅くなるとかじゃないのか? 実行結果が変わるとか困るしそんなことになるならもっと知られてるはずなんだが
262 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 16:45:40.99 ID:3YXzfPPp.net] >>251 最適化のオプション外してビルドしたら? 保険であるvolatiteが「どのようなときに必要か」はMSも公表していないんだからどうしようもない volatiteを含んだ上で機能するコードをどうしても書きたいとかなら知らないけど
263 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 17:49:00.74 ID:YFDGQHp2.net] 保障のようなものでしょ 今はどうか知らないけど 例えば a=1; a=1; a=1; a=1; a=1; みたいなコードがあっても
264 名前:最適化でa=1が一回しか実行されないようにならないで ちゃんと回数分実行されることの保証 [] [ここ壊れてます]
265 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 18:10:01.12 ID:YFDGQHp2.net] 憶測で申し訳ないけど a=calc0(a); b=calc1(a); が最終的にアセンブラレベルで フィールドa = レジスタA レジスタA =フィールドa みたいなのが出てきた場合に シングルスレッドであればあとのレジスタA=aの実行が無駄じゃないかと思って 実行しないとかありうるかもしれない マルチスレッドならフィールドaが書き変わってる可能性あり
266 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 18:24:08.22 ID:MzYJYWNz.net] >>255 コンパイラの最適化で削られるんじゃなく実行されないのか どっちにしてもきりがない
267 名前:デフォルトの名無しさん [2018/08/28(火) 19:01:48.59 ID:5NsMegki.net] >>233 新しいとこ教えてクレメンス
268 名前:デフォルトの名無しさん [2018/08/28(火) 19:52:33.60 ID:QdKJddNI.net] コンパイラの最適化の問題でしょ? 非同期処理で使うフィールドはいれときゃいいんじゃね
269 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 20:25:43.56 ID:M3D05fOs.net] ちなみに「お作法」という言葉を使う人間が書くコードは間違ってます マメな
270 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 20:43:21.83 ID:sKgj8tWl.net] >>251 もう作成されたILのコード全部確認・検証しとけよ 問題が起こらない方がいいのに何か起こらないと困るように見える
271 名前:デフォルトの名無しさん mailto:sage [2018/08/29(水) 01:22:33.42 ID:4YeISD0k.net] >>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といった言語仕様にも記載されていますが、排他制御云々ではありません
272 名前:デフォルトの名無しさん mailto:sage [2018/08/29(水) 02:03:21.40 ID:Hgs5A/6b.net] つまり、実行結果が変わる場合があるということ?
273 名前:デフォルトの名無しさん [2018/08/29(水) 03:59:58.56 ID:B+rDuEfA.net] C#のデストラクタってどういう場面で必要なんでしょうか? ネットの記事で見かけたところ C++ではコンストラクタとセットでプログラマがマネージする必要があるが C#ではシステムが自動でやるのであまり重要じゃないとありましたが イマイチよく分かりませんでした Win32API関数をマーシャリングして使用したりするとデストラクタは必要でしょうか? 実はそういうプログラムを自作してずっと使用してるのですが デストラクタを書いてなくても特に問題が発生したことがありません 問題が出ないのはたまたま自分の使用環境が合ってるだけでしょうか? デストラクタを書かないと具体的にどういう不具合が起こるんでしょうか?
274 名前:デフォルトの名無しさん mailto:sage [2018/08/29(水) 05:59:16.57 ID:saiWj2Qp.net] ファイル・データベース・プロセスなどのリソースが解放されないから、 使用メモリサイズが
275 名前:ドンドン大きくなっていく つまり、メモリリーク [] [ここ壊れてます]
276 名前:デフォルトの名無しさん [2018/08/29(水) 09:22:23.43 ID:o37zBcM2.net] >>264 ありがとうございます その「使用メモリサイズ」というのは タスクマネージャーの「メモリ」という所を見ればいいのですか?
277 名前:デフォルトの名無しさん mailto:sage [2018/08/29(水) 09:30:37.55 ID:SgdWV5FD.net] vmmapを使った方が良いかも HeapWalkerを使えるようになればなおよし
278 名前:デフォルトの名無しさん [2018/08/29(水) 09:55:10.31 ID:o37zBcM2.net] >>266 windowsデフォの管理ツールに「リソースモニタ」ていうのもありますね これでもいいのかな? 初耳な分野なので全く分かりませんが調べてみます ありがとうございました
279 名前:デフォルトの名無しさん mailto:sage [2018/08/29(水) 21:29:00.98 ID:xKUAwzTF.net] C♯にて数あるエクセルファイルの中身を読み取りあれこれしたい時、早く開いて読み取って閉じる方法ってありますか?
280 名前:デフォルトの名無しさん mailto:sage [2018/08/29(水) 21:43:41.82 ID:bGCoQXPI.net] >>268 何と比較して?
281 名前:デフォルトの名無しさん mailto:sage [2018/08/29(水) 22:02:30.99 ID:XA15QLm3.net] >>268 「あれこれ」じゃなく具体的に何がしたいか書かないと やりたいことが多くなるほど「じゃあエクセルで直接開いた方が早いね」になるだろうけど
282 名前:デフォルトの名無しさん mailto:sage [2018/08/29(水) 22:14:58.95 ID:dev0xKTh.net] 前提条件やマシン構成で大きく変わるので思いつく手段を全部書いて実測
283 名前:デフォルトの名無しさん [2018/08/30(木) 03:48:10.84 ID:Aa4o8Duk.net] >>268 バイナリーで読み込むのが最速
284 名前:デフォルトの名無しさん mailto:sage [2018/08/30(木) 07:21:13.96 ID:oIUtx1rS.net] >>270 @シート名の読み込み。 A指定シートの指定列の読み込み。 B指定シートの指定行の読み込み。 こんな感じのを各エクセルに@〜Bを繰り返し行う。 ネットを参考に見て普通に開いて閉じるだと遅くて...
285 名前:デフォルトの名無しさん mailto:sage [2018/08/30(木) 09:55:38.76 ID:l8OdYu1h.net] >>273 ExcelDataReaderでも満足できないレベルに遅いの? だとしたらほぼ無理かと Excel側で予め必要になる情報をVBAとかでtxtファイルに出力しとくとかで対処するしかなさそう
286 名前:デフォルトの名無しさん mailto:sage [2018/08/30(木) 12:24:59.82 ID:8MIxRZMr.net] >>273 ネットで参考にした情報はOLEでExcelを起動して読み込む方法かね? それは遅いからOpen XML SDKでも使って直接ファイルを読んだ方がいいね
287 名前:デフォルトの名無しさん mailto:sage [2018/08/30(木) 17:27:14.97 ID:Cn/2yBNm.net] 質問させてください! VisualStudio2017のC#Formアプリで自分用のテキストエディタを作ろうとしていて、 「改行した時、一行前の行頭に全角スペースがあった場合次の行頭にも全角スペースを挿入する」 というちょっとした自動インデントのような動作をさせたいのが目的です。 探り探りで一応目的の動作をするコードは書けたのですが、 「KeyUpからエンターキーの場合のみ分岐して座標をひとつ戻してから改行かどうかを確かめて、 行数を調べて一文字切り出してからカーソル位置を戻して比較して……」 をはじめとする行程で相当に回りくどいことをやっているような感覚があるので もっとスマートな方法はないものかと思い質問に来ました。 どうぞよろしくお願いします。 https://ideone.com/8J7uBK
288 名前:デフォルトの名無しさん mailto:sage [2018/08/30(木) 18:25:03.14 ID:iISOYGhU.net] エディタはそんなもん 作るの超めんどい
289 名前:デフォルトの名無しさん mailto:sage [2018/08/30(木) 18:56:29.70 ID:2QdSuJnz.net] task難しすぎない…? 非同期が難しいのは当然だけどこんな躓いたのc#が初めて
290 名前:デフォルトの名無しさん [2018/08/30(木) 19:01:33.74 ID:16om6f/5.net] スレッドのシーケンシャル図みたいなのに書き出すといいよ まあスレッドセーフな構造を理解してるのが大前提だけど
291 名前:デフォルトの名無しさん mailto:sage [2018/08/30(木) 19:0
] [ここ壊れてます]
292 名前:5:11.47 ID:syYDPcaO.net mailto: >>278 Taskを使わないと更に難しくなる [] [ここ壊れてます]
293 名前:デフォルトの名無しさん mailto:sage [2018/08/30(木) 19:16:12.27 ID:r/TRQYs/.net] task自体は簡単だと思うけど async/awaitは誤解したまま使うとハマる
294 名前:デフォルトの名無しさん mailto:sage [2018/08/30(木) 19:19:23.09 ID:JgfkbZf2.net] >>275 いや普通にOSSのライブラリ使えよ
295 名前:デフォルトの名無しさん mailto:sage [2018/08/30(木) 19:25:02.55 ID:2+/sJ3kY.net] >>276 読み辛すぎるw っていうか、これ本当にちゃんと動く? KeyUp発生した時点で入力したキーがTextに反映されてる前提になってると思うけどそうだっけ?
296 名前:デフォルトの名無しさん mailto:sage [2018/08/30(木) 19:34:27.48 ID:r/TRQYs/.net] windowsの仕組み上不定な気がする
297 名前:デフォルトの名無しさん [2018/08/30(木) 20:37:16.45 ID:4drhoSMA.net] >>276 行頭に全角スペースが入力されたときにフラグ立てる というのはどうかな 文字列型フラグ変数に行頭に入力された全角スペースを突っ込んでおいて 改行でフラグ変数の値を行頭に挿入とか 行頭全角スペースが削除されたらフラグも空文字列にしないといけないけど
298 名前:デフォルトの名無しさん mailto:sage [2018/08/30(木) 20:42:40.52 ID:2QdSuJnz.net] https://ideone.com/0aD1lJ >>278 で質問したものだけどコードで書いたので下の疑問が正しいのか教えてください A:ここで並列にダウンロードできているのか? B:Resultを使うとデッドロックすると聞いたけどawaitしていれば大丈夫?
299 名前:デフォルトの名無しさん mailto:sage [2018/08/30(木) 21:00:14.61 ID:Assw0OKp.net] >>285 行全部のフラグ作るのとテキスト読み込むときにフラグ作る必要があるが 何万行とかで構成されるテキストでもそれやるの? 動くのなら>>276 の方がまだ楽だと思う
300 名前:デフォルトの名無しさん mailto:sage [2018/08/30(木) 21:07:07.68 ID:cD6Bz7+B.net] >>282 ん? Open XML SDKってOSSなんだが w https://blogs.technet.microsoft.com/microsoft_office_/2014/06/25/open-xml-sdk-goes-open-source/
301 名前:デフォルトの名無しさん mailto:sage [2018/08/30(木) 21:24:36.54 ID:VlraDHRu.net] >>288 え、生でそれ使えってか?
302 名前:デフォルトの名無しさん mailto:sage [2018/08/30(木) 21:26:02.80 ID:Yh+aUVCO.net] >>286 A: DownloadAsyncが真っ当に実装されていれば並列ダウンロードになる (真っ当ではない例: 同期的にダウンロードしてTask.FromResult) B: Task<TResult>.Resultはタスクが終了済みなら即座に値を返すので、デッドロックしない ちなみにTask<TResult>.WhenAllはTask<TResult[]>を返すから return (await Task.WhenAll(tasks)).ToList(); でも行けるはず
303 名前:デフォルトの名無しさん mailto:sage [2018/08/30(木) 21:26:33.91 ID:qGVo2Ysa.net] Open XML SDK生で使ったことあるけど、もうちょっと頑張れなかったのかと言いたい 中のファイルメモリに乗っけてシートごとの並列処理出来るかと思ってたのに全然だし、セルの位置はR1C1限定とかマジで死ねよ
304 名前:デフォルトの名無しさん [2018/08/30(木) 21:27:27.97 ID:jRU2Egdi.net] >>288 Open XML SDKはWordなんかも含むOffice製品全部のSDKちょっと直感的じゃないから ラッパーで多少はExcel VBAライクなClosedXMLとかNPOIとかの話と思われ
305 名前:デフォルトの名無しさん mailto:sage [2018/08/30(木) 21:27:50.35 ID:2+/sJ3kY.net] >>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
306 名前:); } } [] [ここ壊れてます]
307 名前:デフォルトの名無しさん mailto:sage [2018/08/30(木) 21:28:10.88 ID:2+/sJ3kY.net] 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; } } }
308 名前:デフォルトの名無しさん mailto:sage [2018/08/30(木) 21:41:05.42 ID:cD6Bz7+B.net] >>289 , >>292 だからそういう話ならもっと便利なOSS書けよって話 >>282 だと単なるバカか文句しか言えないクズにしかならん
309 名前:デフォルトの名無しさん mailto:sage [2018/08/30(木) 21:46:27.28 ID:2QdSuJnz.net] >>290 勉強になりました c#は書き方いろいろあってむつかしいです