[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 02/22 04:32 / Filesize : 279 KB / Number-of Response : 1018
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

ふらっと C#,C♯,C#(初心者用) Part153



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]
色々ありがとうございます、自分に合ったものを探してみたいと思います








[ 続きを読む ] / [ 携帯版 ]

次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<279KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef