1 名前:デフォルトの名無しさん mailto:sage [2021/12/13(月) 22:53:21.18 ID:dhjmiKBp0.net] !extend:checked:vvvvv:1000:512 次スレを立てる時は↑を2行冒頭に書くこと(1行分は消えて表示されない為) 「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。 他のスレッドでは書き込めないような低レベルな質問、質問者自身なんだか意味がよく分からない質問、 ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。 内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。 なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。 C#に関係の無い話題や荒らしの相手や罵倒レスや酔っぱらいレスはやめてください >>980 を踏んだ人は新スレを建てて下さい。>>980 が無理な場合、話し合って新スレを建てる人を決めて下さい。 ■前スレ ふらっと C#,C♯,C#(初心者用) Part152 mevius.5ch.net/test/read.cgi/tech/1629888256/ ■関連スレ C#, C♯, C#相談室 Part94 mevius.5ch.net/test/read.cgi/tech/1553075856/ ■コードを貼る場合は↓を使いましょう。 https://ideone.com/ https://dotnetfiddle.net/ ■情報源 https://docs.microsoft.com/ja-jp/dotnet/standard/class-libraries/ https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/ https://docs.microsoft.com/en-us/dotnet/standard/class-libraries/ https://referencesource.microsoft.com/ https://source.dot.net/ ・Insider.NET > .NET TIPS - @IT https://www.atmarkit.co.jp/ait/subtop/features/dotnet/dotnettips_index.html ・DOBON.NET .NET Tips https://dobon.net/vb/dotnet/index.html VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2 名前:デフォルトの名無しさん mailto:sage [2021/12/14(火) 15:04:57.66 ID:DHQEOVX70.net] stringデータの容量を小さくしてソフトのAPIに送りたいのですが APIの都合でstringのまま送らなければならない場合、 これ以上容量を小さくする手段はありませんか? 圧縮したバイナリデータをどうにか送信できないかと調べたのですが無理そうで……。
3 名前:デフォルトの名無しさん mailto:sage [2021/12/14(火) 17:52:43.39 ID:vmKXmndG0.net] 何らかの方法で圧縮できたとして 受け取る方のソフトは圧縮されたデータを伸長できるの?
4 名前:デフォルトの名無しさん mailto:sage [2021/12/14(火) 17:56:17.81 ID:WeLzug3DM.net] uudx / uuex か?
5 名前:デフォルトの名無しさん mailto:sage [2021/12/14(火) 18:19:29.34 ID:DHQEOVX70.net] >>3 圧縮して送りたいのはただのセーブデータなのですが、 サーバー側の保存形式がstringを使ったkeyValueで作られているので文字列形式でしか保存できないみたいで。 保存しておいた文字列をこちらで読み込んでからデコードすればいいのでstringのまま圧縮できればよくて、 どうせ日本語までしか扱わないデータなのでSHIFT-JISをutf-8で圧縮……みたいなことができれば理想なのですが そんなピンポイントなのあったりしませんよね、と……。 >>4 解釈があってるかはわからないのですが、 一応圧縮したバイナリデータをBase64でConvertみたいなことは試してみたものの 容量を減らすという目的ではむしろ文字数が増えてしまって。 何か手段がないかなあと思っている次第です。
6 名前:デフォルトの名無しさん [2021/12/14(火) 18:26:30.90 ID:QT7QgCvlM.net] 使用できる文字に番号振って 圧縮したバイナリを文字に割当る いわゆる復活の呪文方式 文字が足らなければ32bitsバイナリを31bitsにずらしていくなど工夫してみな
7 名前:デフォルトの名無しさん mailto:sage [2021/12/14(火) 18:35:23.50 ID:70QYvgE2a.net] >>5 の文章はユニコード(utf16)で720バイト、ユニコード(utf8)で921バイト >>5 の文章をzip圧縮したらバイナリで678バイト。その圧縮バイナリを2文字ずつ(utf8)にしたら2倍の1356バイト(圧縮したらバイト数が増えた) でも前スレ(utf16で348,236バイト)を圧縮したらバイナリ104,639バイト、圧縮utf8で209,278バイト。圧縮したバイナリをテキストにしたほうが小さい 送りたいデータ次第じゃ一度圧縮してから無理やりテキストにした方が容量小さくなるから どっちが有利か生と圧縮を自動選択しながら送る手もある
8 名前:デフォルトの名無しさん mailto:sage [2021/12/14(火) 19:00:02.18 ID:DQcTzC4QM.net] 通常のデータ圧縮は8ビットフルに使うので、 そのままでは難しいのでuuと組み合わせて作ったら?
9 名前:デフォルトの名無しさん mailto:sage [2021/12/14(火) 19:40:08.80 ID:vmKXmndG0.net] UTF-8でバイナリ化してdeflate圧縮してBase64化した後2文字ずつを1つのcharに詰める まあ基本ライブラリで手軽にやるならこんな感じじゃない?
10 名前:デフォルトの名無しさん mailto:sage [2021/12/14(火) 20:14:03.30 ID:4rMew3mV0.net] 7zかなにか圧縮率の高い奴で圧縮しておいてbasE91だな。 base91.sourceforge.net/
11 名前:デフォルトの名無しさん mailto:sage [2021/12/15(水) 07:44:21.38 ID:viWcJGha0.net] 圧縮することによっぽどのメリットがないと無駄にややこしくなるだけだぞ サーバー側が必要に応じて圧縮するのが筋かと UTF-8に変換して送信とか脆弱性の問題もあってサーバー側で禁止してることもある
12 名前:2 mailto:sage [2021/12/15(水) 08:20:09.42 ID:KIyi4EVP0.net] 皆さんありがとうございます! Base64化したものを自分でさらに詰めるというのは思いつきませんでした……なるほど……。 BasE91もまさに机上論こねくり回してるときに欲しかったものの気配がするので中身覗いて調べてみます! >>11 こちらは利用する側なのでサーバーの仕様を変える事はできず、 用意されたフォーマット(これが文字列形式での送信)従うしかないやつですね。 ユーザー毎に使用可能なデータの容量が決められていて(しかもそれがやたら少ない)、 少しでも軽減するためにこちら側でデータを小さくできないかと画策しています。
13 名前:デフォルトの名無しさん mailto:sage [2021/12/15(水) 08:43:57.49 ID:doly6UKJ0.net] ビットマップ間で部分的に画像コピーするのはDrawImageでできますが コピーする際に左右を反転してコピーする方法はないでしょうか? 検索でビットマップ全体をまるごと反転する表示はたくさん出てくるのですが DrawImageの部分コピーで反転するのは見当たらないのです
14 名前:デフォルトの名無しさん mailto:sage [2021/12/15(水) 09:39:43.96 ID:SWORTfJ40.net] g.ScaleTransform(-1, 1) 描き出す先の座標も反転するから座標指定注意
15 名前:デフォルトの名無しさん mailto:sage [2021/12/15(水) 10:18:47.15 ID:IF/hKOzS0.net] できました、ありがとうございます
16 名前:デフォルトの名無しさん mailto:sage [2021/12/15(水) 20:55:12.09 ID:KtX6zlRp0.net] DrawImageに渡すWidthやHeightを負の数にするだけで反対向きに描画するよ
17 名前:デフォルトの名無しさん mailto:sage [2021/12/15(水) 22:41:30.07 ID:9OkRwsNs0.net] LinuxでC#でソフト作りたいのですが .Net 6とmonoは同じものでしょうか?
18 名前:デフォルトの名無しさん mailto:sage [2021/12/15(水) 22:58:53.71 ID:RALnEWNsa.net] monoは.NET4.6か4.7相当
19 名前:デフォルトの名無しさん mailto:sage [2021/12/15(水) 23:37:58.07 ID:9OkRwsNs0.net] ありがとうございます .Net 6をインストールしました
20 名前:デフォルトの名無しさん mailto:sage [2021/12/16(木) 12:03:30.27 ID:GoezKG390.net] private void Form1_KeyDown(object sender, KeyEventArgs e) { keyCode = (int)e.KeyCode; } public void button1_Click(object sender, EventArgs e) { button1.Visible = false; anThread(); // ここをtest();に変えると直接実行になる } private void anThread() { Task task = Task.Run(() => { test(); } } private void test() { int dt; while (true) { if (keyCode!=0) { dt = keyCode; // ここにブレークポイントを置く キーが押されると止まる return; } Thread.Sleep(10); } }
21 名前:デフォルトの名無しさん mailto:sage [2021/12/16(木) 12:04:03.26 ID:GoezKG390.net] このプログラムbutton1押しで開始して、キーが押されるとループ中のブレークポイントで止まるものなんですが これで一般文字キーを押すとちゃんとブレークポイントで止まりkeyCodeが確認できます Enterキーを押した場合はなぜか止まりません anThread();のように別スレッドから動かさずに直接test();で呼ぶと 一般文字キーもEnterキーの時も止まりkeyCode 13が確認できます 別スレッドで動かした時に、Enterキーの時だけForm1_KeyDownさえ呼ばれなくなるのは どうしてでしょうか?
22 名前:デフォルトの名無しさん mailto:sage [2021/12/16(木) 12:25:18.98 ID:6kTxk0Gya.net] 直接呼びで停まる? 直接呼ぶと無限ループに入って、keycode変数が変化しないから(代入が行われるのはループの外だから代入が起きない) ブレークポイントに入ることもないんじゃないかな? ここに書き込む過程でコードを書き換えたなら、そこで略した部分に問題ありそう
23 名前:デフォルトの名無しさん mailto:sage [2021/12/16(木) 12:36:40.33 ID:GoezKG390.net] いえ止まるというのはブレークポイントで止まるので正常に機能しているということです 直接呼びの時はEnterキーでもkeycode変数が変化するのです(正常) 別スレッド呼びにした時にEnterキーだけ変化しないようになります 文字キーは変化します button1にEnterキーが吸収されてるのではないかと思い button1.Visible = false; button1.Enabled = false; さらにForm1.KeyPreview=true; としたのですが、結果は変わりませんでした
24 名前:デフォルトの名無しさん mailto:sage [2021/12/16(木) 12:59:19.79 ID:6kTxk0Gya.net] デバッグ開始する ボタン押す enter以外のキーを押す=止まる 再開する enterを押す=止まらない って順番ということ?それならreturnで抜けてるから デバッグ開始する ボタン押す enterを押す=止まらない enter以外のキーを押す=止まる って順番ということ?
25 名前:デフォルトの名無しさん mailto:sage [2021/12/16(木) 13:04:12.22 ID:GoezKG390.net] そうですね、デバッグ実行は毎回やりなおしてますが enterを押す=止まらない ここのところですね問題は Enterキー故に何かわからないですがviewのどれかに吸収されてるんではとも考えられるんです
26 名前:デフォルトの名無しさん mailto:sage [2021/12/16(木) 13:11:56.87 ID:GoezKG390.net] inr fs; public void button1_Click(object sender, EventArgs e) { if (fs==0) { button1.Visible = false; button1.Enabled = false; anThread(); // ここをtest();に変えると直接実行になる } fs=1; }
27 名前:デフォルトの名無しさん mailto:sage [2021/12/16(木) 13:12:29.66 ID:GoezKG390.net] もっとボタンのとこ具体的にかくと上のようにして一度しかtest()呼ばれないようにしてます
28 名前:デフォルトの名無しさん mailto:sage [2021/12/16(木) 13:19:59.88 ID:6kTxk0Gya.net] なら KeyPreview=true; protected override bool ProcessDialogKey(Keys keyData) { return false; } protected override void OnKeyDown(KeyEventArgs e) { base.OnKeyDown(e); }
29 名前:デフォルトの名無しさん mailto:sage [2021/12/16(木) 13:24:57.28 ID:GoezKG390.net] おおEnterキーでもブレークポイントで止まるようになりました ありがとうございます
30 名前:デフォルトの名無しさん mailto:sage [2021/12/16(木) 13:28:58.72 ID:lYga0rvW0.net] Formに配置したbuttonがEnterキーの制御を奪うから その前にFormでキーを取得したいならPreviewKeyDownイベントを使う
31 名前:デフォルトの名無しさん [2021/12/16(木) 14:09:04.68 ID:i/INwEgL0.net] docs.microsoft.com/ja-jp/dotnet/api にバージョンとかあって.NET 6とか選択するじゃないですか? これって、どれを選べばいいのでしょうか? 自分のPCにどの.NET入ってるか調べる方法はありますでしょうか? よよろしくおねがいします。
32 名前:デフォルトの名無しさん [2021/12/16(木) 14:38:33.33 ID:k8cIynuMM.net] 自分のPCではなくユーザーの環境を考えて選ぼう Windows2000なら2.0 WindowsXPなら4.0までしか使えない
33 名前:デフォルトの名無しさん [2021/12/16(木) 15:37:50.09 ID:y2oCKs8P0.net] 今から始めるなら.NET 6選んでおけば問題ない
34 名前:デフォルトの名無しさん [2021/12/16(木) 17:43:59.24 ID:i/INwEgL0.net] Environment.Versionだと6.0.0 RuntimeEnvironment.GetSystemVersionだとv4.0.30319でした
35 名前:デフォルトの名無しさん [2021/12/16(木) 17:53:32.89 ID:i/INwEgL0.net] System.Runtime.InteropServices.RuntimeInformation.FrameworkDescription だと.NET 6.0.0-rtm.21522.10でした
36 名前:デフォルトの名無しさん [2021/12/16(木) 17:56:18.18 ID:i/INwEgL0.net] clrver.exeだと、こう PS C:\Users\a\source\repos> clrver.exe Microsoft (R) .NET CLR Version Tool Version 4.8.3928.0 Copyright (c) Microsoft Corporation. All rights reserved. Versions installed on the machine: v2.0.50727 v4.0.30319
37 名前:デフォルトの名無しさん mailto:sage [2021/12/16(木) 18:05:33.14 ID:6CYDlCWX0.net] https://i.imgur.com/jv9gyBg.png
38 名前:デフォルトの名無しさん mailto:sage [2021/12/16(木) 20:33:18.00 ID:SBcuHk850.net] mauiって流行りますか?
39 名前:デフォルトの名無しさん mailto:sage [2021/12/16(木) 20:45:26.99 ID:9+J81CzA0.net] Xamarinって流行ったか?つまりそういうことだ
40 名前:デフォルトの名無しさん mailto:sage [2021/12/16(木) 20:53:46.41 ID:p4ec86X90.net] 人脈が無い人には無理
41 名前:デフォルトの名無しさん mailto:sage [2021/12/16(木) 21:37:09.74 ID:nAiVmB6z0.net] mauiも期待はしてるけどいつも通りなんだろうなあ。。
42 名前:デフォルトの名無しさん mailto:sage [2021/12/16(木) 22:11:02.45 ID:6kTxk0Gya.net] マルチプラットフォームっていう目的での利用は流行らないだろうな でも普通にGUIアプリ作る一手段としては使われるんじゃないかな
43 名前:デフォルトの名無しさん mailto:sage [2021/12/16(木) 23:26:32.48 ID:el7qs11a0.net] 言語仕様が多すぎてうんざり。
44 名前:デフォルトの名無しさん mailto:sage [2021/12/17(金) 00:31:22.94 ID:A3/Tt7aa0.net] Linuxに本気で移行しようと思う。
45 名前:デフォルトの名無しさん mailto:sage [2021/12/17(金) 01:19:48.74 ID:OxYtcTfz0.net] >>44 おっ、.NET Core + Linux いいね
46 名前:デフォルトの名無しさん mailto:sage [2021/12/17(金) 01:35:44.89 ID:0Acfg8Fxd.net] これからMSワールドの外へ出てみたら実感すると思うけど、MSスタックは全部MSで揃えて他には見向きもしなくていい状態にこそ意義があるんだよ いったん外にはみ出し始めちゃって歯車が狂うとたちまち不便なところばかりが目につくようになって、気がついたらMS成分は跡形も残らない、という結果になるのがオチだ MSスタックをディスるつもりはなくて、これはむしろ最大限の賛辞だ
47 名前:デフォルトの名無しさん mailto:sage [2021/12/17(金) 08:09:16.08 ID:GkoM7wOP0.net] あれ?MAUIのターゲットにLinuxが入ってない。。。 https://docs.microsoft.com/ja-jp/dotnet/maui/what-is-maui
48 名前:デフォルトの名無しさん mailto:sage [2021/12/17(金) 08:24:00.59 ID:ObFlVNVZM.net] LVGLを使え。という託宣。
49 名前:デフォルトの名無しさん mailto:sage [2021/12/17(金) 08:44:31.07 ID:dbqWYop50.net] >>47 linuxはコミュニティによってサポートされます
50 名前:sage [2021/12/17(金) 11:45:19.21 ID:2+pcMu4G0.net] C:\Users\a>dotnet --info .NET SDK (global.json を反映): Version: 6.0.100 Commit: 9e8b04bbff ランタイム環境: OS Name: Windows OS Version: 10.0.19042 OS Platform: Windows RID: win10-x64 Base Path: C:\Program Files\dotnet\sdk\6.0.100\ Host (useful for support): Version: 6.0.0 Commit: 4822e3c3aa .NET SDKs installed: 6.0.100 [C:\Program Files\dotnet\sdk] .NET runtimes installed: Microsoft.AspNetCore.App 6.0.0 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App] Microsoft.NETCore.App 6.0.0 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App] Microsoft.WindowsDesktop.App 6.0.0 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App] To install additional .NET runtimes or SDKs: https://aka.ms/dotnet-download
51 名前:デフォルトの名無しさん [2021/12/17(金) 13:11:43.35 ID:2+pcMu4G0.net] c#を勉強しはじめたのですが、メモリ関連でヒープとスタックというのがあるのを知りました。 で、C#で型がstaticのデータはヒープ領域に格納されるのですか?それともスタック領域に格納されるのですか?
52 名前:デフォルトの名無しさん mailto:sage [2021/12/17(金) 13:38:19.99 ID:g/fCEX7wa.net] スタックって日常でも使うことあるけど、積み重ねるって意味だからな 積み重ねちゃってるから下にあるものを無理に取り出そうとすると崩れてぐちゃぐちゃになる だから下にあるデータは上にあるのがなくなるまで取り出せない データは上下関係なく好きなところにあるデータにアクセスしたいものだからスタックにはしない=ヒープ でもスタックとかヒープとか覚えなくていいよ C#のテスト問題にそんなのが出たら「もっとまともな問題出せ」って回答用紙に書いときゃいいし C#の本やサイトにそんなのが出てるなら投げ捨てときゃいい
53 名前:デフォルトの名無しさん mailto:sage [2021/12/17(金) 13:41:20.99 ID:eUY6ZgLC0.net] メモリの確保と開放って元々C言語の概念だったよね Javaではなくなったようだけど
54 名前:デフォルトの名無しさん mailto:sage [2021/12/17(金) 14:24:53.34 ID:A3/Tt7aa0.net] メモリを確保するのはアセンブラでもそうだよ。開放するのは動的に使うってことだよ。 スタックはCPUの基本機能、ハードで実装、提供されてるものだよ。だから高速。 SPレジスタ書き換えるだけだからね。速いコード書く人はスタック、ヒープは常に意識してる。
55 名前:デフォルトの名無しさん mailto:sage [2021/12/17(金) 15:05:27.40 ID:g/fCEX7wa.net] そんなの意識するわけないだろ。どう意識するんだよw アセンブラならpush/pop使うこと多いけど、C#じゃそんなの意識して組むのは非常に困難 意識するのは例えばこれはList<int>よりも基本通りint[]でいった方が速度有利だけど、こっちはListでいいとかそういう(ヒープの)使い方程度だよ
56 名前:デフォルトの名無しさん mailto:sage [2021/12/17(金) 15:35:53.88 ID:Uf0Oj/NFd.net] Marshal.AllocHGlobal使うときとかヒープ意識するな
57 名前:デフォルトの名無しさん mailto:sage [2021/12/17(金) 15:38:33.74 ID:8qM/JwoR0.net] 大昔独自のC言語使った組み込み開発で、StaticはROMにマッピングされるやつが有った いやあ、確かに便利だけど言語仕様くらい守れよとは思った
58 名前:デフォルトの名無しさん mailto:sage [2021/12/17(金) 16:30:31.61 ID:xwFg4/y80.net] ただしstack overflowはバイブルな。 これさえあれば、大抵のことは何とかなる
59 名前:デフォルトの名無しさん mailto:sage [2021/12/17(金) 17:26:57.23 ID:OLbNm50pa.net] >>51 ちょっと検索した感じだとstaticな「変数」(あくまで変数ね)は ヒープに置かれるって意見とヒープでもスタックでもないって意見があって はっきり分からんねw 個人的にはstaticな「変数」は一度staticコンストラクタが呼ばれて 作られてしまった後は管理が不要なので後者の方が正しいように感じるがどうだろう
60 名前:デフォルトの名無しさん [2021/12/17(金) 19:03:20.75 ID:FDMn0ZP00.net] MSスタックどころかWindowsフォームしかできないのがMSワールドの外に出ることなんて不可能だろうな
61 名前:デフォルトの名無しさん mailto:sage [2021/12/17(金) 19:14:42.55 ID:25ZW3+3Or.net] C#は適当にGC呼び出せば適切なところでメモリ解放がんばってくれるじゃん
62 名前:デフォルトの名無しさん mailto:sage [2021/12/17(金) 20:16:20.89 ID:hfvLzPNZ0.net] >>51 メモリ領域にはヒープとスタックとコードがある staticはコード領域に確保される コードていうのはそのまんまの意味で命令が書かれてる場所 ちなみにC#のヒープはGCが管理してる特殊な領域
63 名前:デフォルトの名無しさん [2021/12/17(金) 20:53:34.58 ID:2+pcMu4G0.net] これ?? PS C:\Users\a\source\repos\stack\stack\bin\Debug\net6.0> dumpbin /headers stack.exe Microsoft (R) COFF/P
64 名前:E Dumper Version 14.30.30706.0 Copyright (C) Microsoft Corporation. All rights reserved. Dump of file stack.exe PE signature found File Type: EXECUTABLE IMAGE <<中略>> SECTION HEADER #3 .data name 14F8 virtual size 24000 virtual address (0000000140024000 to 00000001400254F7) A00 size of raw data 21C00 file pointer to raw data (00021C00 to 000225FF) 0 file pointer to relocation table 0 file pointer to line numbers 0 number of relocations 0 number of line numbers C0000040 flags Initialized Data Read Write [] [ここ壊れてます]
65 名前:デフォルトの名無しさん [2021/12/17(金) 21:35:28.65 ID:IQClZtiS0.net] >>62 >staticはコード領域に確保される これはあってんの?
66 名前:デフォルトの名無しさん mailto:sage [2021/12/17(金) 21:40:51.67 ID:A3/Tt7aa0.net] xpSP2以降、自己書き換え禁止されたはずだから嘘だと思うけど
67 名前:デフォルトの名無しさん mailto:sage [2021/12/17(金) 22:19:09.70 ID:RGFXVjzf0.net] 嘘つきはMicrosoftの始まりって聞いたで
68 名前:デフォルトの名無しさん mailto:sage [2021/12/17(金) 22:37:03.33 ID:ePonqmC10.net] >>64 ざっくりだけどあってる AppDomainのLoaderHeapのHigh Frequency Heapと呼ばれる場所に MethodTable Strucureの一部として確保される Heapと名前がつくがGC HeapやLarge Object Heapとは別で GCはされずAppDomainがアンロードされるまで生きてる AppDomainをざっくり言えばコード領域
69 名前:デフォルトの名無しさん mailto:sage [2021/12/17(金) 23:21:12.45 ID:g/fCEX7wa.net] ざっくり曲げすぎ。そもそもいわゆるコード領域はリードオンリーだよ
70 名前:デフォルトの名無しさん mailto:sage [2021/12/18(土) 01:21:58.30 ID:4KhQcFRSr.net] とにかくGC連打 メモリ管理をどうこうしようなんて考える必要なし
71 名前:デフォルトの名無しさん mailto:sage [2021/12/18(土) 01:27:31.41 ID:5vur9Hw60.net] 結局、Dispose()だらけで汚いコードだらけみたいな。
72 名前:デフォルトの名無しさん mailto:sage [2021/12/18(土) 01:36:05.34 ID:T7YxQHIHa.net] いやいや。disposeは必ずしろよ・・・
73 名前:デフォルトの名無しさん mailto:sage [2021/12/18(土) 01:51:37.69 ID:pciZCSWm0.net] 某現場で提供されてたDB接続クラスがIDisposable持ってるからusingで書いたら全然動かん よく見たらdispose内でロールバック処理が入ってて目を疑った
74 名前:デフォルトの名無しさん mailto:sage [2021/12/18(土) 02:07:40.04 ID:hd7cWOei0.net] それどうなったの
75 名前:デフォルトの名無しさん mailto:sage [2021/12/18(土) 02:38:11.15 ID:pciZCSWm0.net] >>73 周りに聞いたらみんなusing使わないようにしてた ライブラリは別部署からの提供品で、修正してもらう手続きがめんどくさいから・・・
76 名前:デフォルトの名無しさん mailto:sage [2021/12/18(土) 03:04:40.74 ID:+EDLAGXQ0.net] usingはMSの提供品ならアリ それ以外のライブラリでは信じるに値しない 精々努力目標がいいとこ
77 名前:デフォルトの名無しさん mailto:sage [2021/12/18(土) 03:11:34.73 ID:4KhQcFRSr.net] >>72 何そのトラップw 作った奴アホだろ
78 名前:デフォルトの名無しさん mailto:sage [2021/12/18(土) 03:25:01.34 ID:rlJS0/xAa.net] >>75 別にDisposeの実装だけが特別バグりやすい理由はどこにもないので、 それは羹に懲りて何とかそのものだねw
79 名前:デフォルトの名無しさん mailto:sage [2021/12/18(土) 03:48:54.74 ID:+EDLAGXQ0.net] 別にStreamWriterのusingも疑えって言ってるわけじゃない ただ、チェックされてる保証がないモノを無条件に信じるのはやめろってこと 少なくともMS提供品以外のusingは使うなら一度はdisposeの実装に目を通したほうがいい ブラックボックスのライブラリはメモリリークしてても不思議じゃないから場合によっては 別プロセスにしてキックしないといけないかもしれない
80 名前:デフォルトの名無しさん mailto:sage [2021/12/18(土) 04:00:36.02 ID:+EDLAGXQ0.net] そもそもなまじガベコレなんてあるから 綺麗な後始末にはヘルプをよく読まないといけないクラスが多い気がする まあ、その前にアプリを終了してしまえば問題は起きないが サービスとかだとこいつが牙をむく場面が多い
81 名前:デフォルトの名無しさん mailto:sage [2021/12/18(土) 04:43:58.91 ID:QLDMMuZWa.net] >>78 人の話聞かない人? だから、同じことはDispose以外の全てのメソッドについても当てはまるでしょ。 他人の作ったものは全て信じられないから使わない。 これなら偏執狂的ではあっても論理的に一貫している。 しかしDisposeだけ疑うのは羹に(
82 名前:デフォルトの名無しさん [2021/12/18(土) 05:17:14.21 ID:4kEqj5670.net] >>68 厳密にいうと微妙に違う属性みたい SECTION HEADER #1 .text name 1830C virtual size 1000 virtual address (0000000140001000 to 000000014001930B) 18400 size of raw data 400 file pointer to raw data (00000400 to 000187FF) 0 file pointer to relocation table 0 file pointer to line numbers 0 number of relocations 0 number of line numbers 60000020 flags Code Execute Read
83 名前:デフォルトの名無しさん mailto:sage [2021/12/18(土) 07:53:04.33 ID:EMtIeou+0.net] >>72 トランザクション処理を行っていたらロールバックする仕様は普通じゃね?
84 名前:デフォルトの名無しさん mailto:sage [2021/12/18(土) 08:55:44.41 ID:+EDLAGXQ0.net] >>80 まあ、確認対象に入るだけとも言うな
85 名前:デフォルトの名無しさん mailto:sage [2021/12/18(土) 08:59:22.77 ID:+EDLAGXQ0.net] >>82 失敗してないのにやるんじゃない? usingを正常に抜けるための何らかの条件があってそれがされてないと disposeで失敗とみなしてロールバックするんじゃね? その条件はソースを見るか組んだやつしかわからんが
86 名前:sage mailto:sage [2021/12/18(土) 09:13:54.47 ID:4kEqj5670.net] >>55 以下ソースで30000ちょっとでスタックオーバーフロするから、 それなりに意識する必要のある人もいるように思われ 企業が作るデカイアプリとか public class Hello { public static void a(int n) { System.Console.WriteLine(n); a(n + 1); } public static void Main() { a(0); System.Console.WriteLine("hello world!"); } }
87 名前:デフォルトの名無しさん mailto:sage [2021/12/18(土) 10:36:30.21 ID:rkAxz2WM0.net] https://dotnetfiddle.net/tXv7Oq ランダムで0〜100までの数値を出して0〜50と50〜80、80~100の場合に分けてそれぞれを表示するプログラムです 場合分けを増やすとどうしてもforが複数回繰り返してしまいます、2回目以降の for (int i = 0; i < 5; i++) を1回に抑えたいのですが何かいい方法はありませんか?
88 名前:デフォルトの名無しさん mailto:sage [2021/12/18(土) 10:42:34.52 ID:/Zq/GLbL0.net] なんかの
89 名前:デフォルトの名無しさん mailto:sage [2021/12/18(土) 10:43:28.05 ID:/Zq/GLbL0.net] なんかのデータ構造を3つ用意して一回のループで分けるとか 一回全部ソートして前から見ていくとか
90 名前:デフォルトの名無しさん mailto:sage [2021/12/18(土) 10:46:28.80 ID:T7YxQHIHa.net] linqなんかを使うって方法もあるけど実質同じだからなしだよな stringをいくつか用意しといて、最初のforの中でconsole出力するんじゃなくてstringに値を格納 for抜けてからconsole出力するとか?
91 名前:デフォルトの名無しさん mailto:sage [2021/12/18(土) 11:37:28.63 ID:5vur9Hw60.net] 普通にcommitしてからdispose()すればrollbackしないんじゃねーの? 原因不明で途中終了されたらrollbackするのは普通に見える。 とにかくデストラクタがC++と同じタイミングで走ってくれれば C#にdisposeはいらなかったんじゃないのかと初心者のボクは思うわけですよ。
92 名前:デフォルトの名無しさん mailto:sage [2021/12/18(土) 11:57:23.73 ID:EMtIeou+0.net] >>86 宿題っぽいから単純にメソッドを分けてみたよ https://dotnetfiddle.net/639EZQ
93 名前:デフォルトの名無しさん mailto:sage [2021/12/18(土) 12:12:33.65 ID:5vur9Hw60.net] 速度重視なのかメモリ効率重視なのかによるよな。 普通は分けたデータは再利用するので3つ分の配列を作ってそこに入れるかな。 なら場合分け処理は最初の1ループ一回しかしないで済む。
94 名前:デフォルトの名無しさん mailto:sage [2021/12/18(土) 13:11:47.91 ID:Y+I1/Zg80.net] 自分も分離と利用を分けるかな。 こんな感じ。 https://dotnetfiddle.net/OMdmbO
95 名前:デフォルトの名無しさん mailto:sage [2021/12/18(土) 14:04:14.85 ID:GkRVZLhXa.net] >>86 その例なら単純にdata[]を昇順にソートしてから var i = 0; Console.Write("0以上50未満:"); for (; data[i] < 50 && data[i] >= 0; i++) { ... } Console.Write("50以上80未満:"); for (; data[i] < 80 && data[i] >= 50; i++) { ... } とかでいいんじゃないの?
96 名前:デフォルトの名無しさん mailto:sage [2021/12/18(土) 14:32:27.17 ID:iUN/Cy1s0.net] >>90 disposeでrollbackするのはConnectionじゃなくてTransactionだと思う いずれにしても動かなくなるのは使う側の問題だね
97 名前:デフォルトの名無しさん mailto:sage [2021/12/18(土) 14:56:48.68 ID:yfxR8FS90.net] >>90 正確には、コミットしたあと、何もない処理をロールバックするんじゃないかな 実質何もしないのと同じ 未コミットあるかないか確認するのが丁寧ではあるだろうけど なんにせよIDisposableなDB接続クラスを未コミットでDisposeするのは使い方が悪いわ
98 名前:デフォルトの名無しさん mailto:sage [2021/12/18(土) 18:11:55.26 ID:iUN/Cy1s0.net] >>95 うー、俺が間違ってたわ https://docs.microsoft.com/en-us/dotnet/api/system.data.sqlclient.sqlconnection.close?view=dotnet-plat-ext-6.0#remarks
99 名前:デフォルトの名無しさん [2021/12/18(土) 22:12:35.26 ID:4kEqj5670.net] ここってスキル高そうな人いるみたいだけど、以下でランキング入りできますか? paiza.jp/botchi/ranking paiza.jp/steins_gate/ranking paiza.jp/logic_summoner/top/ranking
100 名前:デフォルトの名無しさん mailto:sage [2021/12/18(土) 23:03:36.27 ID:rkAxz2WM0.net] 色々ありがとうございます、自分に合ったものを探してみたいと思います