ふらっと C#,C♯,C#(初心者用) Part132
レス数が950を超えています。1000を超えると書き込みができなくなります。
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、
質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。
なお、テンプレが読めない回答者は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください
>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。
■前スレ
ふらっと C#,C♯,C#(初心者用) Part131
http://mevius.5ch.net/test/read.cgi/tech/1504861931/
■関連スレ
C#, C♯, C#相談室 Part94 [無断転載禁止]©2ch.net
http://mevius.5ch.net/test/read.cgi/tech/1492843013/
■コードを貼る場合は↓を使いましょう。
http://ideone.com/
https://dotnetfiddle.net/
■情報源
https://msdn.microsoft.com/en-us/library/gg145045.aspx
http://referencesource.microsoft.com/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured CodeDomだからC#創成期だね
いわゆるひとつのレガシー >>879
ぐぬぬだよ!
exeとdll持ってきてコマンドラインにするかあ 外部のexeをインスタンス化してそれにコマンド発行ってできる?出来た気がする
7Zipを複数起動して複数ファイルの圧縮と解凍をしたいのよ ProcessStartInfoか
なんでもないです >>884
ファイルIO絡むから、複数同時に動かすとむしろ遅くなるんじゃないかな。 >>886
えー
SSDやRAMに出しても?
メモリ内で解凍してデータ加工して再圧縮できない?全部メモリ内で
外部ツール使ってたら無理か >>881
夜中まで必死にググった努力は認める w
>>882の言うように今時としてはいまいちのコードだよ 「ref string」が何に使えるかは置いておいて、これで合ってる?
ttps://ideone.com/k9UegY >>886
むしろI/O絡むから複数同時の意味がある >>871
仕組みは良くわからんけどスタックトレースを辿るとかの処理が重いと思ってる。
速度の必要の無い処理はオレオレ例外投げてエラー処理してる。
その方がコードがスッキリ書けるし。 >>881
いつの間にか、ref 参照型 は不要から ref 全て不要に変わってるし。
ref 値型は必要でしょう。 >>877
例外をどこで処理するかは非常に簡単だが皆分かってない。
・例外をcatchして処理できる場合はcatchして処理する
・処理できない場合は何もしなくて(無駄にcatch throwもしない)呼び出しもとに任せる
・最後はAppDomain.UnhandledException等で拾ってログ吐いて落とす
何も出来ないのにcatchしてエラーメッセージだけ出すヤツ多すぎ。 言語仕様としてref値型が必要なのはわかるけど
じゃあ使うかというと使わないかな
もう何年も書いた記憶がない ゲームで自分で当たり判定を書いたとき
GC を避けるため使ったことがあるな >>894
hoge.TryParseも使った事がないと? .TryParse( ) は ref じゃなくて out アプリ作るたびに
ViewModelBaseのSetProperty<T>(ref T field, T newValue
を作って毎回使ってるな。
で、今ちょうどJavaでMVVMやってて、refないのでSetPropertyがかけなくてつらい・・
if (this.value != value) {
this.value = value;
notifyほにゃ
}
refないのでプロパティ毎に3行書いてるんだけど死にたい。 SetProperty(value, v => field = value)
でいいだろ
設定先が単純なフィールドでない場合にも対応できるしJavaでも同じ んん??
どういうことそれ。引数2つ??
3つ使って
SetProperty<T>(T field, T newValue, Action<T> setterActon)
こんな感じならいけそだけど。
SetPropert(field1, 10, t => field1 = 10)
後は最後にproperyNameを渡す引数追加して。 SetPropert(field1, 10, t => field1 = 10)
は
SetProperty(field1, 10, t => field1 = t)だった
bool SetProperty<T>(T field, T newValue, Action<T> setterActon, string propertyName) {
if (!object.equals(field, newValue)) return false;
setterAction(newValue);
onPropertyChanged(propertyName);
return true;
}
コンパイルしてねぇけどこんな感じかな。 >>888
前とは別の人だし、githubで適当に検索してみただけだから特に時間もかけてないんだけどね
roslynとかで"ref 適当な型名"で検索しても、何件か引っかかるし一応新しいコードでも(美しいかはおいといて)使ってるんじゃないかな
軽くしか見てないけどnullなら初期化ってしてるコードが多いけど、ArrayBuilerはある程度有効活用になってそうな雰囲気
ref値型いらないって言ってるのはホントの初心者でしょ
そちらは明らかに使いみちだらけ 例外が必ず適切にはかれるわけではないからこうしろって言われても困る >>902
いいわけは要らんよ
君がref参照型が有効だと思うコードを晒せばいいだけ まだ変なのが暴れてるけど、参照型であれ値型であれrefなんか必要ない、
であれば主張に一貫性があり一理ある。
筋が通らないのは。refは値型でしか意味がないという主張。
昨日説明した通り値型参照型の違いはrefの有用性と関係ない。
>>906
>>904がそうい言いたいのかどうか分からないけど、例外の処理方法や
どの程度「真面目に」処理するかだって所詮要件次第なのに、例外の話になると
妙に教条主義的になる変な人がいるのは確かだ >>907
例外が適切に吐かれないって事が有るのか知りたい。 >>907
> まだ変なのが暴れてるけど
自己紹介ですか? ref はCの&にあたるものだが、&iは普通に使うけど&pなんて見たこと無いってことだ >>894
パフォーマンスを求められる処理には縁がない人なんですね 素人なのでref/outの使い道がよくわからないのですが、public変数にするとかじゃだめなんですか? >>912
メソッド実行するたびにインスタンス作成すればおk >>912
全部Public変数にしたら引数も戻り値も不要だね。
君は天才かも。 >>912
素人なら自作関数には両方使わない
唯一あるとすれば
パフォーマンスをシビアにする必要がある
かつフィールドをたくさん持った値型
の場合だがそんな状況はアプリにもよるがそうそう無い >>917
赤間って誰?
MSDNのコラムにc#の例外処理について解説していた良い記事があったんだが見つからんわ。
C と C++のが見つかったw
https://msdn.microsoft.com/ja-jp/library/cc440190(v=vs.71).aspx 「よほどのことがない限り、アプリケーションで try-catch を書いてはいけません。」
これよ、これ。例外処理の本質。 >>924
そうはいってもファイルが読めないだけで例外だすじゃん >>922
ああこの記事ね。
個人的にはあんまりロジカルじゃないと思うんだよねこの記事。
読んでいて感じるいくつかの「なぜ」に対する答えがない
(1) エラーを業務エラーとそれ以外に大別するのはいいとして、なぜ前者に例外機構を
使ってはいけないのか?
(2) なぜ集約例外ハンドラーみたいなスパテッティーを推すのか。
そもそもそういうスパゲッティーを避けるための仕組みが例外機構ではなかったのか?
(3) いくら何でも
「よほどのことがない限り、アプリケーションで try-catch を書いてはいけません」
これは言い過ぎではないのか。 リトライとかの回復処理は全部ライブラリー内で完結してることが前提なんだろうな。
言いたいことは分からないでもないけど、想定しているアプリがすごく狭い気がする。 アプリケーションってよりビジネスロジックって言いたかったのかね >>926
(1)や(3)はコメントで回答されてるんじゃないの?
集約例外ハンドラーは業務エラーを戻り値で表現しようと
例外で表現しようと必要じゃない? てか集約例外ハンドラーがスパゲッティってどういうこと?
エラーメッセージやログ処理して終了するだけのごく短いコードだと思うけど違うの? >>928
例外に落ちた時点で回復可能なエラーって限られてるぞ。
ファイルがロックされて書き込めないとか。
殆どは回復不能だし、デッドロックにしてもリトライするより適切にロックしているかやロジックを見直す必要があるだろうし。
ま、例外の原因で一番多いのは自分の仕込んだバグだw >>932
集約例外に回復コードを仕込もうと思ってるんだろ。 糞ベンダーは、全てのメソッドにtry-catchを入れるコーディング規約。 ネットで更新してるアプリってテキストファイルの文字読み込んでプログラミングしてるんだなその方が変更しやすいのか? ランチャー的なフォームから小画面を起動するフォームアプリを作ったのですが、小画面大量に出すと重くなります。小画面毎に別スレッドで起動する方法を教えてください 設計が間違ってます
小画面を大量に出さないようにしましょう 小画面の意味がわからないし、大量とはどのくらいなのかもわからない なんだ勘違いかテキストで読み込んでるのは理由あんまりないんだ >>942
そこをなんとか
>>943
10枚程度です。 ツールでボットやwebチェッカー使ってるんじゃないかな
ボット一個にwindow1個とか
そういうのはwindow一個で多数のものを扱うべき
リソースの無駄 >>945
フォームを別に表示したら元のフォームには影響しないし
10や20くらいの別フォーム起動したくらいで重くなったことはない
小画面で何をやっているかわからないしスレッド分けて〜では多分解決しない
>>944
スレ違いだと思うけどアンチウィルスのパターンデータ更新みたいなのと勘違いしているだろ
VisualStudioだってバイナリアップデートなんだから 関数にListを渡す時に関数内で要素を書き換えできないようにするにはどうすればいいですか >>949
C#7.2を待つかそのlistをコピーして渡すか書き換えないように気を付けるかしてください >>952
なにそれ
オブジェクトのリストを作ったとしてそのリストの要素のプロパティを書き換えるのも出来ない? >>951
readonly ref って構造体限定じゃね? >>801
無いことがバレてプログラマの月収は一律18万円になった >>949
AsReadOnlyメソッドで足りるならそちらで
>>905
言い訳とは
普通にroslynのソースとダブルポインタを要求するPInvokeじゃ不満足?複雑なやり取りを低コストでやれてると思うが >>941
スキルの無いヤツほどスレッドを使いたがる。
スレッドが何か分かっているヤツはスレッドでしか実現できない場合のみ仕方なくスレッドを使う。 >>957
> 普通にroslynのソースとダブルポインタを要求するPInvokeじゃ不満足?複雑なやり取りを低コストでやれてると思うが
だからそう言う言い訳はどうでもいいからコードを晒せよ >>953
流石にそれを禁止するのは無理
IListにあるAddとかRemoveとかインデクサのsetterとかがないというだけなので >>958
では軽くする方法を教えて下さい。
子フォームでは重要なことは非同期で行っています 何やってるか知らんけど
10枚も出したらそれで限界な可能性は?
非アクティブなときも重いってあるかなぁ? >>962
では重い原因を教えて下さい。
ただフォーム出して重くなったでは何も分かりません。 >>962
まず重い原因を突き止めましょう。
純粋にFormのロード(表示)だけに時間がかかってるなら
個人的は軽量化は諦めた方がいいと思う
Loadか何かのタイミングで実行してる初期化が重いなら
そこを軽量化するなりタイミングを工夫するなり
個人的想像だと前者の可能性は低い気がする
というか、Vista時代のPCでも余程大量のコントロール乗せてたり
レイアウトパネル系を多用でもしてないとそこまで極端に重くはならんと思う Listを抽象化したいのですが、どのように書けば良いでしょうか?
以下のように書けるかと思ったのですがダメでした
よろしくお願いします
interface ITest
{
}
public class Test: ITest
{
public string hogege { get; set; }
}
class Hoge
{
List<ITest> test = new List<Test>();
} >>962
単純にそのアプリ、親アプリと子アプリに別けて、親アプリから小アプリを10個起動したら駄目なの?
重い処理があって辛いぐらいの機能があるなら、1つの子画面で親ごと巻き込まれて死んでほしくないし、俺ならプロセスから別ける。
あと、非同期でやってる、の非同期がasyncなら、それは普通にタスクを切り替えるスキの間隔が広いかとか、諸々普通に重いだけじゃないの?
await Task.Delay(1)とか呼んでみたら? >>969
今更どうしようもないが、次作るときはウインドウの数減らしたほうが良いよ
できればメイン一つで画面遷移やタブで処理+ダイアログも同時に開くのは一つだけとかね >>966
List抽象化はIList<Test> test= じゃないのかよw >>969
プロセスの分け方も何も、今フォーム起こすのに使ってるメソッドの引数を文字列にして、Process.Startで起動引数にして起動するだけのイメージだったけど。 そもそもParallelは同期処理に使うもんだぞ
Fork-Joinっていう、同期処理を並列で実行するパターン 一晩エスパーしたけどListの抽象化の意味解読できず
ITest[] tests = new Test[n];
IEnumrable<ITest> = new List<Test>();
なら可能だが リスト抽象化という分かってるようで何も理解できてないお題 レス数が950を超えています。1000を超えると書き込みができなくなります。