!extend:checked:vvvvv:1000:512
次スレを立てる時は↑を2行冒頭に書くこと(1行分は消えて表示されない為)
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。
なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスや酔っぱらいレスはやめてください
>>980を踏んだ人は新スレを建てて下さい。>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。
■前スレ
ふらっと C#,C♯,C#(初心者用) Part152
http://mevius.5ch.net/test/read.cgi/tech/1629888256/
■関連スレ
C#, C♯, C#相談室 Part94
http://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
ふらっと C#,C♯,C#(初心者用) Part153
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ bf2c-yjVA)
2021/12/13(月) 22:53:21.18ID:dhjmiKBp02デフォルトの名無しさん (ワッチョイ c702-p36F)
2021/12/14(火) 15:04:57.66ID:DHQEOVX70 stringデータの容量を小さくしてソフトのAPIに送りたいのですが
APIの都合でstringのまま送らなければならない場合、
これ以上容量を小さくする手段はありませんか?
圧縮したバイナリデータをどうにか送信できないかと調べたのですが無理そうで……。
APIの都合でstringのまま送らなければならない場合、
これ以上容量を小さくする手段はありませんか?
圧縮したバイナリデータをどうにか送信できないかと調べたのですが無理そうで……。
3デフォルトの名無しさん (ワッチョイ df2c-yjVA)
2021/12/14(火) 17:52:43.39ID:vmKXmndG0 何らかの方法で圧縮できたとして
受け取る方のソフトは圧縮されたデータを伸長できるの?
受け取る方のソフトは圧縮されたデータを伸長できるの?
4デフォルトの名無しさん (ブーイモ MMff-gtpG)
2021/12/14(火) 17:56:17.81ID:WeLzug3DM uudx / uuex か?
5デフォルトの名無しさん (ワッチョイ c702-p36F)
2021/12/14(火) 18:19:29.34ID:DHQEOVX70 >>3
圧縮して送りたいのはただのセーブデータなのですが、
サーバー側の保存形式がstringを使ったkeyValueで作られているので文字列形式でしか保存できないみたいで。
保存しておいた文字列をこちらで読み込んでからデコードすればいいのでstringのまま圧縮できればよくて、
どうせ日本語までしか扱わないデータなのでSHIFT-JISをutf-8で圧縮……みたいなことができれば理想なのですが
そんなピンポイントなのあったりしませんよね、と……。
>>4
解釈があってるかはわからないのですが、
一応圧縮したバイナリデータをBase64でConvertみたいなことは試してみたものの
容量を減らすという目的ではむしろ文字数が増えてしまって。
何か手段がないかなあと思っている次第です。
圧縮して送りたいのはただのセーブデータなのですが、
サーバー側の保存形式がstringを使ったkeyValueで作られているので文字列形式でしか保存できないみたいで。
保存しておいた文字列をこちらで読み込んでからデコードすればいいのでstringのまま圧縮できればよくて、
どうせ日本語までしか扱わないデータなのでSHIFT-JISをutf-8で圧縮……みたいなことができれば理想なのですが
そんなピンポイントなのあったりしませんよね、と……。
>>4
解釈があってるかはわからないのですが、
一応圧縮したバイナリデータをBase64でConvertみたいなことは試してみたものの
容量を減らすという目的ではむしろ文字数が増えてしまって。
何か手段がないかなあと思っている次第です。
6デフォルトの名無しさん (ラクッペペ MM8f-JWjg)
2021/12/14(火) 18:26:30.90ID:QT7QgCvlM 使用できる文字に番号振って
圧縮したバイナリを文字に割当る
いわゆる復活の呪文方式
文字が足らなければ32bitsバイナリを31bitsにずらしていくなど工夫してみな
圧縮したバイナリを文字に割当る
いわゆる復活の呪文方式
文字が足らなければ32bitsバイナリを31bitsにずらしていくなど工夫してみな
7デフォルトの名無しさん (アウアウウー Sa6b-5lnE)
2021/12/14(火) 18:35:23.50ID:70QYvgE2a8デフォルトの名無しさん (ブーイモ MMcf-gtpG)
2021/12/14(火) 19:00:02.18ID:DQcTzC4QM 通常のデータ圧縮は8ビットフルに使うので、
そのままでは難しいのでuuと組み合わせて作ったら?
そのままでは難しいのでuuと組み合わせて作ったら?
9デフォルトの名無しさん (ワッチョイ df2c-yjVA)
2021/12/14(火) 19:40:08.80ID:vmKXmndG0 UTF-8でバイナリ化してdeflate圧縮してBase64化した後2文字ずつを1つのcharに詰める
まあ基本ライブラリで手軽にやるならこんな感じじゃない?
まあ基本ライブラリで手軽にやるならこんな感じじゃない?
10デフォルトの名無しさん (ワッチョイ 67b0-zDwW)
2021/12/14(火) 20:14:03.30ID:4rMew3mV0 7zかなにか圧縮率の高い奴で圧縮しておいてbasE91だな。
http://base91.sourceforge.net/
http://base91.sourceforge.net/
11デフォルトの名無しさん (ワッチョイ a701-4A0X)
2021/12/15(水) 07:44:21.38ID:viWcJGha0 圧縮することによっぽどのメリットがないと無駄にややこしくなるだけだぞ
サーバー側が必要に応じて圧縮するのが筋かと
UTF-8に変換して送信とか脆弱性の問題もあってサーバー側で禁止してることもある
サーバー側が必要に応じて圧縮するのが筋かと
UTF-8に変換して送信とか脆弱性の問題もあってサーバー側で禁止してることもある
122 (ワッチョイ c702-p36F)
2021/12/15(水) 08:20:09.42ID:KIyi4EVP0 皆さんありがとうございます! Base64化したものを自分でさらに詰めるというのは思いつきませんでした……なるほど……。
BasE91もまさに机上論こねくり回してるときに欲しかったものの気配がするので中身覗いて調べてみます!
>>11
こちらは利用する側なのでサーバーの仕様を変える事はできず、
用意されたフォーマット(これが文字列形式での送信)従うしかないやつですね。
ユーザー毎に使用可能なデータの容量が決められていて(しかもそれがやたら少ない)、
少しでも軽減するためにこちら側でデータを小さくできないかと画策しています。
BasE91もまさに机上論こねくり回してるときに欲しかったものの気配がするので中身覗いて調べてみます!
>>11
こちらは利用する側なのでサーバーの仕様を変える事はできず、
用意されたフォーマット(これが文字列形式での送信)従うしかないやつですね。
ユーザー毎に使用可能なデータの容量が決められていて(しかもそれがやたら少ない)、
少しでも軽減するためにこちら側でデータを小さくできないかと画策しています。
13デフォルトの名無しさん (ワッチョイ 2780-4iyA)
2021/12/15(水) 08:43:57.49ID:doly6UKJ0 ビットマップ間で部分的に画像コピーするのはDrawImageでできますが
コピーする際に左右を反転してコピーする方法はないでしょうか?
検索でビットマップ全体をまるごと反転する表示はたくさん出てくるのですが
DrawImageの部分コピーで反転するのは見当たらないのです
コピーする際に左右を反転してコピーする方法はないでしょうか?
検索でビットマップ全体をまるごと反転する表示はたくさん出てくるのですが
DrawImageの部分コピーで反転するのは見当たらないのです
14デフォルトの名無しさん (ワッチョイ df2c-yjVA)
2021/12/15(水) 09:39:43.96ID:SWORTfJ40 g.ScaleTransform(-1, 1)
描き出す先の座標も反転するから座標指定注意
描き出す先の座標も反転するから座標指定注意
15デフォルトの名無しさん (ワッチョイ a748-4iyA)
2021/12/15(水) 10:18:47.15ID:IF/hKOzS0 できました、ありがとうございます
16デフォルトの名無しさん (ワッチョイ e701-zKou)
2021/12/15(水) 20:55:12.09ID:KtX6zlRp0 DrawImageに渡すWidthやHeightを負の数にするだけで反対向きに描画するよ
17デフォルトの名無しさん (ワッチョイ c75f-o4eJ)
2021/12/15(水) 22:41:30.07ID:9OkRwsNs0 LinuxでC#でソフト作りたいのですが
.Net 6とmonoは同じものでしょうか?
.Net 6とmonoは同じものでしょうか?
18デフォルトの名無しさん (アウアウウー Sa6b-5lnE)
2021/12/15(水) 22:58:53.71ID:RALnEWNsa monoは.NET4.6か4.7相当
19デフォルトの名無しさん (ワッチョイ c75f-o4eJ)
2021/12/15(水) 23:37:58.07ID:9OkRwsNs0 ありがとうございます
.Net 6をインストールしました
.Net 6をインストールしました
20デフォルトの名無しさん (ワッチョイ a748-4iyA)
2021/12/16(木) 12:03:30.27ID:GoezKG390 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);
}
}
{
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デフォルトの名無しさん (ワッチョイ a748-4iyA)
2021/12/16(木) 12:04:03.26ID:GoezKG390 このプログラムbutton1押しで開始して、キーが押されるとループ中のブレークポイントで止まるものなんですが
これで一般文字キーを押すとちゃんとブレークポイントで止まりkeyCodeが確認できます
Enterキーを押した場合はなぜか止まりません
anThread();のように別スレッドから動かさずに直接test();で呼ぶと
一般文字キーもEnterキーの時も止まりkeyCode 13が確認できます
別スレッドで動かした時に、Enterキーの時だけForm1_KeyDownさえ呼ばれなくなるのは
どうしてでしょうか?
これで一般文字キーを押すとちゃんとブレークポイントで止まりkeyCodeが確認できます
Enterキーを押した場合はなぜか止まりません
anThread();のように別スレッドから動かさずに直接test();で呼ぶと
一般文字キーもEnterキーの時も止まりkeyCode 13が確認できます
別スレッドで動かした時に、Enterキーの時だけForm1_KeyDownさえ呼ばれなくなるのは
どうしてでしょうか?
22デフォルトの名無しさん (アウアウウー Sa6b-5lnE)
2021/12/16(木) 12:25:18.98ID:6kTxk0Gya 直接呼びで停まる?
直接呼ぶと無限ループに入って、keycode変数が変化しないから(代入が行われるのはループの外だから代入が起きない)
ブレークポイントに入ることもないんじゃないかな?
ここに書き込む過程でコードを書き換えたなら、そこで略した部分に問題ありそう
直接呼ぶと無限ループに入って、keycode変数が変化しないから(代入が行われるのはループの外だから代入が起きない)
ブレークポイントに入ることもないんじゃないかな?
ここに書き込む過程でコードを書き換えたなら、そこで略した部分に問題ありそう
23デフォルトの名無しさん (ワッチョイ a748-4iyA)
2021/12/16(木) 12:36:40.33ID:GoezKG390 いえ止まるというのはブレークポイントで止まるので正常に機能しているということです
直接呼びの時はEnterキーでもkeycode変数が変化するのです(正常)
別スレッド呼びにした時にEnterキーだけ変化しないようになります 文字キーは変化します
button1にEnterキーが吸収されてるのではないかと思い
button1.Visible = false;
button1.Enabled = false;
さらにForm1.KeyPreview=true;
としたのですが、結果は変わりませんでした
直接呼びの時はEnterキーでもkeycode変数が変化するのです(正常)
別スレッド呼びにした時にEnterキーだけ変化しないようになります 文字キーは変化します
button1にEnterキーが吸収されてるのではないかと思い
button1.Visible = false;
button1.Enabled = false;
さらにForm1.KeyPreview=true;
としたのですが、結果は変わりませんでした
24デフォルトの名無しさん (アウアウウー Sa6b-5lnE)
2021/12/16(木) 12:59:19.79ID:6kTxk0Gya デバッグ開始する
ボタン押す
enter以外のキーを押す=止まる
再開する
enterを押す=止まらない
って順番ということ?それならreturnで抜けてるから
デバッグ開始する
ボタン押す
enterを押す=止まらない
enter以外のキーを押す=止まる
って順番ということ?
ボタン押す
enter以外のキーを押す=止まる
再開する
enterを押す=止まらない
って順番ということ?それならreturnで抜けてるから
デバッグ開始する
ボタン押す
enterを押す=止まらない
enter以外のキーを押す=止まる
って順番ということ?
25デフォルトの名無しさん (ワッチョイ a748-4iyA)
2021/12/16(木) 13:04:12.22ID:GoezKG390 そうですね、デバッグ実行は毎回やりなおしてますが
enterを押す=止まらない ここのところですね問題は
Enterキー故に何かわからないですがviewのどれかに吸収されてるんではとも考えられるんです
enterを押す=止まらない ここのところですね問題は
Enterキー故に何かわからないですがviewのどれかに吸収されてるんではとも考えられるんです
26デフォルトの名無しさん (ワッチョイ a748-4iyA)
2021/12/16(木) 13:11:56.87ID:GoezKG390 inr fs;
public void button1_Click(object sender, EventArgs e)
{
if (fs==0) {
button1.Visible = false;
button1.Enabled = false;
anThread(); // ここをtest();に変えると直接実行になる
}
fs=1;
}
public void button1_Click(object sender, EventArgs e)
{
if (fs==0) {
button1.Visible = false;
button1.Enabled = false;
anThread(); // ここをtest();に変えると直接実行になる
}
fs=1;
}
27デフォルトの名無しさん (ワッチョイ a748-4iyA)
2021/12/16(木) 13:12:29.66ID:GoezKG390 もっとボタンのとこ具体的にかくと上のようにして一度しかtest()呼ばれないようにしてます
28デフォルトの名無しさん (アウアウウー Sa6b-5lnE)
2021/12/16(木) 13:19:59.88ID:6kTxk0Gya なら
KeyPreview=true;
protected override bool ProcessDialogKey(Keys keyData)
{
return false;
}
protected override void OnKeyDown(KeyEventArgs e)
{
base.OnKeyDown(e);
}
KeyPreview=true;
protected override bool ProcessDialogKey(Keys keyData)
{
return false;
}
protected override void OnKeyDown(KeyEventArgs e)
{
base.OnKeyDown(e);
}
29デフォルトの名無しさん (ワッチョイ a748-4iyA)
2021/12/16(木) 13:24:57.28ID:GoezKG390 おおEnterキーでもブレークポイントで止まるようになりました
ありがとうございます
ありがとうございます
30デフォルトの名無しさん (ワッチョイ a72d-zmQK)
2021/12/16(木) 13:28:58.72ID:lYga0rvW0 Formに配置したbuttonがEnterキーの制御を奪うから
その前にFormでキーを取得したいならPreviewKeyDownイベントを使う
その前にFormでキーを取得したいならPreviewKeyDownイベントを使う
31デフォルトの名無しさん (ワッチョイ e701-p36F)
2021/12/16(木) 14:09:04.68ID:i/INwEgL0 docs.microsoft.com/ja-jp/dotnet/api
にバージョンとかあって.NET 6とか選択するじゃないですか?
これって、どれを選べばいいのでしょうか?
自分のPCにどの.NET入ってるか調べる方法はありますでしょうか?
よよろしくおねがいします。
にバージョンとかあって.NET 6とか選択するじゃないですか?
これって、どれを選べばいいのでしょうか?
自分のPCにどの.NET入ってるか調べる方法はありますでしょうか?
よよろしくおねがいします。
32デフォルトの名無しさん (ラクッペペ MM8f-JWjg)
2021/12/16(木) 14:38:33.33ID:k8cIynuMM 自分のPCではなくユーザーの環境を考えて選ぼう
Windows2000なら2.0
WindowsXPなら4.0までしか使えない
Windows2000なら2.0
WindowsXPなら4.0までしか使えない
33デフォルトの名無しさん (ワッチョイ 675f-Rkf/)
2021/12/16(木) 15:37:50.09ID:y2oCKs8P0 今から始めるなら.NET 6選んでおけば問題ない
34デフォルトの名無しさん (ワッチョイ e701-p36F)
2021/12/16(木) 17:43:59.24ID:i/INwEgL0 Environment.Versionだと6.0.0
RuntimeEnvironment.GetSystemVersionだとv4.0.30319でした
RuntimeEnvironment.GetSystemVersionだとv4.0.30319でした
35デフォルトの名無しさん (ワッチョイ e701-p36F)
2021/12/16(木) 17:53:32.89ID:i/INwEgL0 System.Runtime.InteropServices.RuntimeInformation.FrameworkDescription
だと.NET 6.0.0-rtm.21522.10でした
だと.NET 6.0.0-rtm.21522.10でした
36デフォルトの名無しさん (ワッチョイ e701-p36F)
2021/12/16(木) 17:56:18.18ID:i/INwEgL0 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
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デフォルトの名無しさん (ワッチョイ 47da-3ffG)
2021/12/16(木) 18:05:33.14ID:6CYDlCWX038デフォルトの名無しさん (ワッチョイ c75f-o4eJ)
2021/12/16(木) 20:33:18.00ID:SBcuHk850 mauiって流行りますか?
39デフォルトの名無しさん (ワッチョイ e701-YTVu)
2021/12/16(木) 20:45:26.99ID:9+J81CzA0 Xamarinって流行ったか?つまりそういうことだ
40デフォルトの名無しさん (ワッチョイ 7fda-8rTh)
2021/12/16(木) 20:53:46.41ID:p4ec86X90 人脈が無い人には無理
41デフォルトの名無しさん (ワッチョイ 27ac-vu5C)
2021/12/16(木) 21:37:09.74ID:nAiVmB6z0 mauiも期待はしてるけどいつも通りなんだろうなあ。。
42デフォルトの名無しさん (アウアウウー Sa6b-5lnE)
2021/12/16(木) 22:11:02.45ID:6kTxk0Gya マルチプラットフォームっていう目的での利用は流行らないだろうな
でも普通にGUIアプリ作る一手段としては使われるんじゃないかな
でも普通にGUIアプリ作る一手段としては使われるんじゃないかな
43デフォルトの名無しさん (ワッチョイ 4718-N/e5)
2021/12/16(木) 23:26:32.48ID:el7qs11a0 言語仕様が多すぎてうんざり。
44デフォルトの名無しさん (ワッチョイ 0f18-RSrH)
2021/12/17(金) 00:31:22.94ID:A3/Tt7aa0 Linuxに本気で移行しようと思う。
45デフォルトの名無しさん (ワッチョイ 8a47-WIuU)
2021/12/17(金) 01:19:48.74ID:OxYtcTfz0 >>44
おっ、.NET Core + Linux いいね
おっ、.NET Core + Linux いいね
46デフォルトの名無しさん (スッップ Sd8a-jY/M)
2021/12/17(金) 01:35:44.89ID:0Acfg8Fxd これからMSワールドの外へ出てみたら実感すると思うけど、MSスタックは全部MSで揃えて他には見向きもしなくていい状態にこそ意義があるんだよ
いったん外にはみ出し始めちゃって歯車が狂うとたちまち不便なところばかりが目につくようになって、気がついたらMS成分は跡形も残らない、という結果になるのがオチだ
MSスタックをディスるつもりはなくて、これはむしろ最大限の賛辞だ
いったん外にはみ出し始めちゃって歯車が狂うとたちまち不便なところばかりが目につくようになって、気がついたらMS成分は跡形も残らない、という結果になるのがオチだ
MSスタックをディスるつもりはなくて、これはむしろ最大限の賛辞だ
47デフォルトの名無しさん (ワッチョイ beb0-i1tV)
2021/12/17(金) 08:09:16.08ID:GkoM7wOP0 あれ?MAUIのターゲットにLinuxが入ってない。。。
https://docs.microsoft.com/ja-jp/dotnet/maui/what-is-maui
https://docs.microsoft.com/ja-jp/dotnet/maui/what-is-maui
48デフォルトの名無しさん (ブーイモ MMe6-qbXX)
2021/12/17(金) 08:24:00.59ID:ObFlVNVZM LVGLを使え。という託宣。
49デフォルトの名無しさん (ワッチョイ 97c3-s2xl)
2021/12/17(金) 08:44:31.07ID:dbqWYop50 >>47
linuxはコミュニティによってサポートされます
linuxはコミュニティによってサポートされます
50sage (ワッチョイ a301-izju)
2021/12/17(金) 11:45:19.21ID:2+pcMu4G0 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
.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デフォルトの名無しさん (ワッチョイ a301-izju)
2021/12/17(金) 13:11:43.35ID:2+pcMu4G0 c#を勉強しはじめたのですが、メモリ関連でヒープとスタックというのがあるのを知りました。
で、C#で型がstaticのデータはヒープ領域に格納されるのですか?それともスタック領域に格納されるのですか?
で、C#で型がstaticのデータはヒープ領域に格納されるのですか?それともスタック領域に格納されるのですか?
52デフォルトの名無しさん (アウアウウー Sa9f-f5lq)
2021/12/17(金) 13:38:19.99ID:g/fCEX7wa スタックって日常でも使うことあるけど、積み重ねるって意味だからな
積み重ねちゃってるから下にあるものを無理に取り出そうとすると崩れてぐちゃぐちゃになる
だから下にあるデータは上にあるのがなくなるまで取り出せない
データは上下関係なく好きなところにあるデータにアクセスしたいものだからスタックにはしない=ヒープ
でもスタックとかヒープとか覚えなくていいよ
C#のテスト問題にそんなのが出たら「もっとまともな問題出せ」って回答用紙に書いときゃいいし
C#の本やサイトにそんなのが出てるなら投げ捨てときゃいい
積み重ねちゃってるから下にあるものを無理に取り出そうとすると崩れてぐちゃぐちゃになる
だから下にあるデータは上にあるのがなくなるまで取り出せない
データは上下関係なく好きなところにあるデータにアクセスしたいものだからスタックにはしない=ヒープ
でもスタックとかヒープとか覚えなくていいよ
C#のテスト問題にそんなのが出たら「もっとまともな問題出せ」って回答用紙に書いときゃいいし
C#の本やサイトにそんなのが出てるなら投げ捨てときゃいい
53デフォルトの名無しさん (ワッチョイ 8b59-1Hc8)
2021/12/17(金) 13:41:20.99ID:eUY6ZgLC0 メモリの確保と開放って元々C言語の概念だったよね
Javaではなくなったようだけど
Javaではなくなったようだけど
54デフォルトの名無しさん (ワッチョイ 0f18-RSrH)
2021/12/17(金) 14:24:53.34ID:A3/Tt7aa0 メモリを確保するのはアセンブラでもそうだよ。開放するのは動的に使うってことだよ。
スタックはCPUの基本機能、ハードで実装、提供されてるものだよ。だから高速。
SPレジスタ書き換えるだけだからね。速いコード書く人はスタック、ヒープは常に意識してる。
スタックはCPUの基本機能、ハードで実装、提供されてるものだよ。だから高速。
SPレジスタ書き換えるだけだからね。速いコード書く人はスタック、ヒープは常に意識してる。
55デフォルトの名無しさん (アウアウウー Sa9f-f5lq)
2021/12/17(金) 15:05:27.40ID:g/fCEX7wa そんなの意識するわけないだろ。どう意識するんだよw
アセンブラならpush/pop使うこと多いけど、C#じゃそんなの意識して組むのは非常に困難
意識するのは例えばこれはList<int>よりも基本通りint[]でいった方が速度有利だけど、こっちはListでいいとかそういう(ヒープの)使い方程度だよ
アセンブラならpush/pop使うこと多いけど、C#じゃそんなの意識して組むのは非常に困難
意識するのは例えばこれはList<int>よりも基本通りint[]でいった方が速度有利だけど、こっちはListでいいとかそういう(ヒープの)使い方程度だよ
56デフォルトの名無しさん (スププ Sd8a-WIuU)
2021/12/17(金) 15:35:53.88ID:Uf0Oj/NFd Marshal.AllocHGlobal使うときとかヒープ意識するな
57デフォルトの名無しさん (ワッチョイ 6a42-g56a)
2021/12/17(金) 15:38:33.74ID:8qM/JwoR0 大昔独自のC言語使った組み込み開発で、StaticはROMにマッピングされるやつが有った
いやあ、確かに便利だけど言語仕様くらい守れよとは思った
いやあ、確かに便利だけど言語仕様くらい守れよとは思った
58デフォルトの名無しさん (ワッチョイ a6da-SJTP)
2021/12/17(金) 16:30:31.61ID:xwFg4/y80 ただしstack overflowはバイブルな。
これさえあれば、大抵のことは何とかなる
これさえあれば、大抵のことは何とかなる
59デフォルトの名無しさん (アウアウウー Sa9f-xPAV)
2021/12/17(金) 17:26:57.23ID:OLbNm50pa >>51
ちょっと検索した感じだとstaticな「変数」(あくまで変数ね)は
ヒープに置かれるって意見とヒープでもスタックでもないって意見があって
はっきり分からんねw
個人的にはstaticな「変数」は一度staticコンストラクタが呼ばれて
作られてしまった後は管理が不要なので後者の方が正しいように感じるがどうだろう
ちょっと検索した感じだとstaticな「変数」(あくまで変数ね)は
ヒープに置かれるって意見とヒープでもスタックでもないって意見があって
はっきり分からんねw
個人的にはstaticな「変数」は一度staticコンストラクタが呼ばれて
作られてしまった後は管理が不要なので後者の方が正しいように感じるがどうだろう
60デフォルトの名無しさん (ワッチョイ 535f-j66Y)
2021/12/17(金) 19:03:20.75ID:FDMn0ZP00 MSスタックどころかWindowsフォームしかできないのがMSワールドの外に出ることなんて不可能だろうな
61デフォルトの名無しさん (オッペケ Srb3-fmnO)
2021/12/17(金) 19:14:42.55ID:25ZW3+3Or C#は適当にGC呼び出せば適切なところでメモリ解放がんばってくれるじゃん
62デフォルトの名無しさん (ワッチョイ 3b01-jbri)
2021/12/17(金) 20:16:20.89ID:hfvLzPNZ063デフォルトの名無しさん (ワッチョイ a301-izju)
2021/12/17(金) 20:53:34.58ID:2+pcMu4G0 これ??
PS C:\Users\a\source\repos\stack\stack\bin\Debug\net6.0> dumpbin /headers stack.exe
Microsoft (R) COFF/PE 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
PS C:\Users\a\source\repos\stack\stack\bin\Debug\net6.0> dumpbin /headers stack.exe
Microsoft (R) COFF/PE 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
64デフォルトの名無しさん (ワッチョイ 3ebb-fVZy)
2021/12/17(金) 21:35:28.65ID:IQClZtiS065デフォルトの名無しさん (ワッチョイ 0f18-RSrH)
2021/12/17(金) 21:40:51.67ID:A3/Tt7aa0 xpSP2以降、自己書き換え禁止されたはずだから嘘だと思うけど
66デフォルトの名無しさん (ワッチョイ 7e33-bJft)
2021/12/17(金) 22:19:09.70ID:RGFXVjzf0 嘘つきはMicrosoftの始まりって聞いたで
67デフォルトの名無しさん (ワッチョイ 2a01-7mHJ)
2021/12/17(金) 22:37:03.33ID:ePonqmC10 >>64
ざっくりだけどあってる
AppDomainのLoaderHeapのHigh Frequency Heapと呼ばれる場所に
MethodTable Strucureの一部として確保される
Heapと名前がつくがGC HeapやLarge Object Heapとは別で
GCはされずAppDomainがアンロードされるまで生きてる
AppDomainをざっくり言えばコード領域
ざっくりだけどあってる
AppDomainのLoaderHeapのHigh Frequency Heapと呼ばれる場所に
MethodTable Strucureの一部として確保される
Heapと名前がつくがGC HeapやLarge Object Heapとは別で
GCはされずAppDomainがアンロードされるまで生きてる
AppDomainをざっくり言えばコード領域
68デフォルトの名無しさん (アウアウウー Sa9f-f5lq)
2021/12/17(金) 23:21:12.45ID:g/fCEX7wa ざっくり曲げすぎ。そもそもいわゆるコード領域はリードオンリーだよ
69デフォルトの名無しさん (オッペケ Srb3-fmnO)
2021/12/18(土) 01:21:58.30ID:4KhQcFRSr とにかくGC連打
メモリ管理をどうこうしようなんて考える必要なし
メモリ管理をどうこうしようなんて考える必要なし
70デフォルトの名無しさん (ワッチョイ 0f18-RSrH)
2021/12/18(土) 01:27:31.41ID:5vur9Hw60 結局、Dispose()だらけで汚いコードだらけみたいな。
71デフォルトの名無しさん (アウアウウー Sa9f-f5lq)
2021/12/18(土) 01:36:05.34ID:T7YxQHIHa いやいや。disposeは必ずしろよ・・・
72デフォルトの名無しさん (ワッチョイ 3b01-WooP)
2021/12/18(土) 01:51:37.69ID:pciZCSWm0 某現場で提供されてたDB接続クラスがIDisposable持ってるからusingで書いたら全然動かん
よく見たらdispose内でロールバック処理が入ってて目を疑った
よく見たらdispose内でロールバック処理が入ってて目を疑った
73デフォルトの名無しさん (ワッチョイ a301-eGgJ)
2021/12/18(土) 02:07:40.04ID:hd7cWOei0 それどうなったの
74デフォルトの名無しさん (ワッチョイ 3b01-WooP)
2021/12/18(土) 02:38:11.15ID:pciZCSWm075デフォルトの名無しさん (ワッチョイ bea7-4tmb)
2021/12/18(土) 03:04:40.74ID:+EDLAGXQ0 usingはMSの提供品ならアリ
それ以外のライブラリでは信じるに値しない
精々努力目標がいいとこ
それ以外のライブラリでは信じるに値しない
精々努力目標がいいとこ
76デフォルトの名無しさん (オッペケ Srb3-fmnO)
2021/12/18(土) 03:11:34.73ID:4KhQcFRSr77デフォルトの名無しさん (アウアウウー Sa9f-xPAV)
2021/12/18(土) 03:25:01.34ID:rlJS0/xAa78デフォルトの名無しさん (ワッチョイ bea7-4tmb)
2021/12/18(土) 03:48:54.74ID:+EDLAGXQ0 別にStreamWriterのusingも疑えって言ってるわけじゃない
ただ、チェックされてる保証がないモノを無条件に信じるのはやめろってこと
少なくともMS提供品以外のusingは使うなら一度はdisposeの実装に目を通したほうがいい
ブラックボックスのライブラリはメモリリークしてても不思議じゃないから場合によっては
別プロセスにしてキックしないといけないかもしれない
ただ、チェックされてる保証がないモノを無条件に信じるのはやめろってこと
少なくともMS提供品以外のusingは使うなら一度はdisposeの実装に目を通したほうがいい
ブラックボックスのライブラリはメモリリークしてても不思議じゃないから場合によっては
別プロセスにしてキックしないといけないかもしれない
79デフォルトの名無しさん (ワッチョイ bea7-4tmb)
2021/12/18(土) 04:00:36.02ID:+EDLAGXQ0 そもそもなまじガベコレなんてあるから
綺麗な後始末にはヘルプをよく読まないといけないクラスが多い気がする
まあ、その前にアプリを終了してしまえば問題は起きないが
サービスとかだとこいつが牙をむく場面が多い
綺麗な後始末にはヘルプをよく読まないといけないクラスが多い気がする
まあ、その前にアプリを終了してしまえば問題は起きないが
サービスとかだとこいつが牙をむく場面が多い
80デフォルトの名無しさん (アウアウウー Sa9f-xPAV)
2021/12/18(土) 04:43:58.91ID:QLDMMuZWa >>78
人の話聞かない人?
だから、同じことはDispose以外の全てのメソッドについても当てはまるでしょ。
他人の作ったものは全て信じられないから使わない。
これなら偏執狂的ではあっても論理的に一貫している。
しかしDisposeだけ疑うのは羹に(
人の話聞かない人?
だから、同じことはDispose以外の全てのメソッドについても当てはまるでしょ。
他人の作ったものは全て信じられないから使わない。
これなら偏執狂的ではあっても論理的に一貫している。
しかしDisposeだけ疑うのは羹に(
81デフォルトの名無しさん (ワッチョイ a301-izju)
2021/12/18(土) 05:17:14.21ID:4kEqj5670 >>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
厳密にいうと微妙に違う属性みたい
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
82デフォルトの名無しさん (ワッチョイ 5f78-kSWT)
2021/12/18(土) 07:53:04.33ID:EMtIeou+0 >>72
トランザクション処理を行っていたらロールバックする仕様は普通じゃね?
トランザクション処理を行っていたらロールバックする仕様は普通じゃね?
83デフォルトの名無しさん (ワッチョイ bea7-4tmb)
2021/12/18(土) 08:55:44.41ID:+EDLAGXQ0 >>80
まあ、確認対象に入るだけとも言うな
まあ、確認対象に入るだけとも言うな
84デフォルトの名無しさん (ワッチョイ bea7-4tmb)
2021/12/18(土) 08:59:22.77ID:+EDLAGXQ0 >>82
失敗してないのにやるんじゃない?
usingを正常に抜けるための何らかの条件があってそれがされてないと
disposeで失敗とみなしてロールバックするんじゃね?
その条件はソースを見るか組んだやつしかわからんが
失敗してないのにやるんじゃない?
usingを正常に抜けるための何らかの条件があってそれがされてないと
disposeで失敗とみなしてロールバックするんじゃね?
その条件はソースを見るか組んだやつしかわからんが
85sage (ワッチョイ a301-izju)
2021/12/18(土) 09:13:54.47ID:4kEqj5670 >>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!");
}
}
以下ソースで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!");
}
}
86デフォルトの名無しさん (ワッチョイ a301-izju)
2021/12/18(土) 10:36:30.21ID:rkAxz2WM0 https://dotnetfiddle.net/tXv7Oq
ランダムで0〜100までの数値を出して0〜50と50〜80、80~100の場合に分けてそれぞれを表示するプログラムです
場合分けを増やすとどうしてもforが複数回繰り返してしまいます、2回目以降の
for (int i = 0; i < 5; i++)
を1回に抑えたいのですが何かいい方法はありませんか?
ランダムで0〜100までの数値を出して0〜50と50〜80、80~100の場合に分けてそれぞれを表示するプログラムです
場合分けを増やすとどうしてもforが複数回繰り返してしまいます、2回目以降の
for (int i = 0; i < 5; i++)
を1回に抑えたいのですが何かいい方法はありませんか?
87デフォルトの名無しさん (ワッチョイ be46-eOGQ)
2021/12/18(土) 10:42:34.52ID:/Zq/GLbL0 なんかの
88デフォルトの名無しさん (ワッチョイ be46-eOGQ)
2021/12/18(土) 10:43:28.05ID:/Zq/GLbL0 なんかのデータ構造を3つ用意して一回のループで分けるとか
一回全部ソートして前から見ていくとか
一回全部ソートして前から見ていくとか
89デフォルトの名無しさん (アウアウウー Sa9f-f5lq)
2021/12/18(土) 10:46:28.80ID:T7YxQHIHa linqなんかを使うって方法もあるけど実質同じだからなしだよな
stringをいくつか用意しといて、最初のforの中でconsole出力するんじゃなくてstringに値を格納
for抜けてからconsole出力するとか?
stringをいくつか用意しといて、最初のforの中でconsole出力するんじゃなくてstringに値を格納
for抜けてからconsole出力するとか?
90デフォルトの名無しさん (ワッチョイ 0f18-RSrH)
2021/12/18(土) 11:37:28.63ID:5vur9Hw60 普通にcommitしてからdispose()すればrollbackしないんじゃねーの?
原因不明で途中終了されたらrollbackするのは普通に見える。
とにかくデストラクタがC++と同じタイミングで走ってくれれば
C#にdisposeはいらなかったんじゃないのかと初心者のボクは思うわけですよ。
原因不明で途中終了されたらrollbackするのは普通に見える。
とにかくデストラクタがC++と同じタイミングで走ってくれれば
C#にdisposeはいらなかったんじゃないのかと初心者のボクは思うわけですよ。
91デフォルトの名無しさん (ワッチョイ 5f78-kSWT)
2021/12/18(土) 11:57:23.73ID:EMtIeou+092デフォルトの名無しさん (ワッチョイ 0f18-RSrH)
2021/12/18(土) 12:12:33.65ID:5vur9Hw60 速度重視なのかメモリ効率重視なのかによるよな。
普通は分けたデータは再利用するので3つ分の配列を作ってそこに入れるかな。
なら場合分け処理は最初の1ループ一回しかしないで済む。
普通は分けたデータは再利用するので3つ分の配列を作ってそこに入れるかな。
なら場合分け処理は最初の1ループ一回しかしないで済む。
93デフォルトの名無しさん (ワッチョイ 1f02-kYDk)
2021/12/18(土) 13:11:47.91ID:Y+I1/Zg8094デフォルトの名無しさん (アウアウウー Sa9f-xPAV)
2021/12/18(土) 14:04:14.85ID:GkRVZLhXa >>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++) { ... }
とかでいいんじゃないの?
その例なら単純に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++) { ... }
とかでいいんじゃないの?
95デフォルトの名無しさん (ワッチョイ 2a01-7mHJ)
2021/12/18(土) 14:32:27.17ID:iUN/Cy1s096デフォルトの名無しさん (ワッチョイ 0f2f-j66Y)
2021/12/18(土) 14:56:48.68ID:yfxR8FS90 >>90
正確には、コミットしたあと、何もない処理をロールバックするんじゃないかな
実質何もしないのと同じ
未コミットあるかないか確認するのが丁寧ではあるだろうけど
なんにせよIDisposableなDB接続クラスを未コミットでDisposeするのは使い方が悪いわ
正確には、コミットしたあと、何もない処理をロールバックするんじゃないかな
実質何もしないのと同じ
未コミットあるかないか確認するのが丁寧ではあるだろうけど
なんにせよIDisposableなDB接続クラスを未コミットでDisposeするのは使い方が悪いわ
97デフォルトの名無しさん (ワッチョイ 2a01-7mHJ)
2021/12/18(土) 18:11:55.26ID:iUN/Cy1s098デフォルトの名無しさん (ワッチョイ a301-izju)
2021/12/18(土) 22:12:35.26ID:4kEqj5670 ここってスキル高そうな人いるみたいだけど、以下でランキング入りできますか?
paiza.jp/botchi/ranking
paiza.jp/steins_gate/ranking
paiza.jp/logic_summoner/top/ranking
paiza.jp/botchi/ranking
paiza.jp/steins_gate/ranking
paiza.jp/logic_summoner/top/ranking
99デフォルトの名無しさん (ワッチョイ a301-izju)
2021/12/18(土) 23:03:36.27ID:rkAxz2WM0 色々ありがとうございます、自分に合ったものを探してみたいと思います
100デフォルトの名無しさん (ワッチョイ 1f5f-4jiE)
2021/12/19(日) 14:12:33.67ID:XEu/0Ow00 1.jpg
10.jpg
2.jpg
を
1.jpg
2.jpg
10.jpg
のように自然順ソートできるライブラリありませんか?
Windows,Mac,Linuxで動かせるものがほしいです
10.jpg
2.jpg
を
1.jpg
2.jpg
10.jpg
のように自然順ソートできるライブラリありませんか?
Windows,Mac,Linuxで動かせるものがほしいです
101デフォルトの名無しさん (ワッチョイ be63-Ucht)
2021/12/19(日) 14:34:22.80ID:O/qDX0wZ0 ライブラリはないと思うよ
君の言う自然順の定義が適当すぎるからね
君の言う自然順の定義が適当すぎるからね
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- ネット殺到「高市総理の責任」「完全に高市リスク」「負けるな」中国が水産物輸入停止→流石に総理批判の声も「どう責任取る?」 ★2 [樽悶★]
- 中国外務省局長 「ポケットに手を入れていたのは寒いから」 日本との局長級会談で ★3 [お断り★]
- 【為替】対ドルで157円台、対ユーロ181円台に下落 財政悪化を警戒 [蚤の市★]
- 高市首相「台湾有事」発言を引き出した「立憲・岡田克也氏」に聞いた質問の真意「これはマズイ発言だと」少しずらしてみたが焼け石に水 [ぐれ★]
- トランプ氏「台湾侵攻すれば北京爆撃」“過激予告発言”報道がXで再燃「高市氏の1億倍やばい」 [七波羅探題★]
- 【自民/維新】国会議員の歳費、月5万円アップで調整 月額134万4000円に 維新配慮で次の国政選挙後に引き上げ方針 [Hitzeschleier★]
- 【高市mRNA】 モデルナ。mRNA薬をアメリカ国内で一貫生産へ [485983549]
- 日本人「な、なぜだ?なぜこの件で日本を助けてくれる国が0カ国なんだ!?」。日本人、さすがに気づく [805596214]
- ホタテ6t(トン)、返品されるwwwwwwwwwwwwwwwwwwwwwwww [329329848]
- 【不思議】ヤフコメ、なぜか円安の話の時だけ高市批判が集まり正常化する事態に…… [305926466]
- ポケットの中の戦争
- んなぁ…みんな~おりゅ~🍬❓🏡
