ふらっとC#,C♯,C#(初心者用) Part79
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2011/09/21(水) 21:34:56.61「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。
ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からない場合など、勇気をもって書き込んでください。
内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。
なお、テンプレ2行目が読めない回答者は邪魔なので後述のC#相談室に移動して下さい。
>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。
■前スレ
ふらっとC#,C♯,C#(初心者用) Part78
http://hibari.2ch.net/test/read.cgi/tech/1312310658/
■関連スレ
C#, C♯, C#相談室 Part67
http://hibari.2ch.net/test/read.cgi/tech/1308128665/
ミスターサタンのC#相談室
http://hibari.2ch.net/test/read.cgi/tech/1092656075/
VB.NET質問スレ(Part36)
http://hibari.2ch.net/test/read.cgi/tech/1301828549/
くだすれC++/CLI(初心者用)part2
http://hibari.2ch.net/test/read.cgi/tech/1268613679/
0153デフォルトの名無しさん
2011/09/28(水) 14:40:16.060154デフォルトの名無しさん
2011/09/28(水) 16:54:59.06phpとかで作った方が早いんじゃね
0155デフォルトの名無しさん
2011/09/28(水) 17:00:02.81その辺はC#関係ないな
htmlとかweb系の話
0156デフォルトの名無しさん
2011/09/28(水) 17:23:38.290157デフォルトの名無しさん
2011/09/28(水) 17:38:23.42http://msdn.microsoft.com/ja-jp/library/cc671436.aspx
とりあずここを見ればいいんじゃね
違ったらすまんのう
0158デフォルトの名無しさん
2011/09/28(水) 18:20:30.550159デフォルトの名無しさん
2011/09/28(水) 19:42:18.00ほれ
/* --- コンテンツ ----------------------------------------------------------------------- */
#content {
width: 650px;
margin: 0px 0px 0px 0px;
padding: 0px 0px 0px 0px;
float: left;
background-color: #ffffff;
}
/* --- メイン ----------------------------------------------------------------------- */
#main {
width: 500px;
margin: 0px 0px 0px 0px;
padding: 0px 0px 0px 0px;
float: left;
background-color: #ffffff;
}
/* --- サイドナビ ----------------------------------------------------------------------- */
#sidenav {
width: 150px;
margin: 0px 0px 0px 0px;
padding: 0px 0px 0px 0px;
float: left;
background-color: #ffffff;
}
0160デフォルトの名無しさん
2011/09/28(水) 20:02:14.91#A{
position:relative;
padding-top:aaa;
padding-left:bbb;
}
#B{
position:absolute;
top:0;
left:0;
width:100%;
height:aaa;
}
#C{
position:absolute;
top:aaa;
left:0;
width:bbb;
}
<div id="A">
<div id="B">ヘッダー</div>
<div id="C">メニュー</div>
<div id="D">コンテント</div>
</div>
0161デフォルトの名無しさん
2011/09/28(水) 20:04:08.080162デフォルトの名無しさん
2011/09/28(水) 21:14:23.91メインスレッドから任意のメソッドを実行させたいんですが
ループ内に条件分岐つけてフィールド変数を条件にして実行させるくらいしか思いつかないんですが、
もっとスマートな方法ってありませんか?
このイベントを発生させるとこのスレッドの上で動く的な
0163デフォルトの名無しさん
2011/09/28(水) 21:16:46.48なんで「その」スレッドに拘る必要があるの?
何かスレッドのこと根本的に勘違いしてるんじゃないの?
0164デフォルトの名無しさん
2011/09/28(水) 21:22:38.66メインスレッドで他のスレッド立ち上げても次の瞬間にJoinしてたらほぼ意味が無い。
設計としては、スレッドにキューを持たせてそのキューに分岐変数をガシガシ突っ込みつつ、
スレッドは頑張って関数を処理するという感じだと思うんだが。。。
並列化したいんであれば、そういう処理を書いて、ワーカースレッドを増やすのがいいだろうね。
0165デフォルトの名無しさん
2011/09/28(水) 21:28:55.30待機はループ回したりしないでWaitHandle使う
.NET4ならBlockingCollection<T>使えば超簡単
0166デフォルトの名無しさん
2011/09/28(水) 21:33:27.600167162
2011/09/28(水) 22:01:20.44整理して出直します
0169デフォルトの名無しさん
2011/09/29(木) 10:04:33.58C#における参照渡しは中身の場所を表し、中身をそのまま渡すのは値渡しになっていますが
http://ufcpp.net/study/csharp/oo_reference.html
C++の参照渡しは内容そのものを渡して、場所を表すのはポインタ渡しと考えてよろしいのでしょうか?
http://www.kab-studio.biz/Programing/Codian/Pointer/06.html
・C#の参照渡し=C++のポインタ渡し
・C#の値渡し=C++の参照渡し
と、いうように思えてきました。
ググっていたらちょっと混乱してきたので、すいませんがよろしくお願いします。
0170デフォルトの名無しさん
2011/09/29(木) 10:23:52.00C++のポインタ付きとポインタなしが参照型と値型に大体重なる
参照渡しはC++にあった引数で(Hoge& hoge)って書く奴と大体同じ
C++だと参照&はローカル変数とかでも使えたがC#では引数のref/out限定
0171デフォルトの名無しさん
2011/09/29(木) 10:26:54.64C#で参照型を引数に渡すのは参照渡しじゃないよ。上のサイトにも参照渡しとは書いてないだろ。
変数の場所を渡すのがC#やC++でいう参照渡し。
変数の中身をコピーして渡すのがC#やC++でいう値渡し。
で、値型と参照型の違いは、値型は変数の中身そのものがオブジェクトなのに対して
参照型はヒープ上にあるオブジェクトの識別番号(ハンドル)が変数の中身になる。
0172デフォルトの名無しさん
2011/09/29(木) 11:35:29.54ああっ、参照型と参照渡しは全くの別物なのですか。
ところどころ「参照」「ポインタ」とだけ出てくるので混乱していました。
・変数のアドレスを渡す:参照渡し(参照型=アドレス=ポインタの位置のコピー)
・変数の中身を渡す:ポインタ渡し(ポインタが指定した場所の値を渡す)=値型の渡し
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1320144958
で、大体良いのですね。
ありがとうございました。
>C++ の参照型(&がつくやつ)は、本当に参照です。
>元の値をそっくりそのまま渡すというのが一番しっくりくるイメージです。まさに「参照」。
>#実際は、ポインタの特殊系と言うべき代物ですがw<怒られそうだw
>ちなみに、.NET の参照型と、Native C++ の参照型は、日本語にすれば同じですけど、意味(実装)はまったく違いますw
>#で、こういうこと言うと知らない人は頭抱えてしまうんだwww
>まず、C++でいうと、関数呼び出し時の渡し方って3パターンなることになってる(コーディングスタイル上)。
>・値渡し
>・ポインタ渡し
>・参照渡し
>で、イメージで言うと黒龍さんの言う通り、値渡しとポインタ渡しは結局はものをコピーで渡しているので、「渡し方」において違いはない。
>でも、参照渡しはそれでは説明がつかないので、私の場合は「同じ領域に別名がつくんだよ」と説明します。
http://blogs.wankuma.com/kokuryu/archive/2007/07/25/87015.aspx
0173デフォルトの名無しさん
2011/09/29(木) 11:56:16.89参照型の変数にはオブジェクトのIDが入っている。渡すときにはその値が渡る。それだけ。
0174デフォルトの名無しさん
2011/09/29(木) 14:22:50.58ソースのタブのフローティングを切る設定はどこですればいいですか?
0175デフォルトの名無しさん
2011/09/29(木) 15:17:17.26余計ややこしいだけだなwww
0176デフォルトの名無しさん
2011/09/29(木) 15:24:41.20C#やるならC++の記憶は消した方が楽かもね
0177169
2011/09/29(木) 15:51:41.42ポインタ渡しを直接使えるかC++/CLIでクロスライブラリを作るか考えてみたとこだったんです
0178デフォルトの名無しさん
2011/09/29(木) 15:57:42.58>参照型はヒープ上にあるオブジェクトの識別番号(ハンドル)が変数の中身になる。
って事実上は参照渡しじゃないの?
アドレスじゃないから厳密には違うんだろうけど
0179デフォルトの名無しさん
2011/09/29(木) 16:04:11.340180デフォルトの名無しさん
2011/09/29(木) 16:06:47.830181デフォルトの名無しさん
2011/09/29(木) 18:27:29.97ポインタや参照渡しの引数が指してるのは場所。
.netのハンドルが指してるのは場所じゃなくてオブジェクトそのもの。全然違う。
0182デフォルトの名無しさん
2011/09/29(木) 21:48:25.420183デフォルトの名無しさん
2011/09/29(木) 21:53:18.820184デフォルトの名無しさん
2011/09/29(木) 22:06:16.830185デフォルトの名無しさん
2011/09/29(木) 22:44:41.27C++で、「ポインター変数の参照渡し」って言われてちゃんと理解できる?
0186デフォルトの名無しさん
2011/09/29(木) 22:45:48.55http://ufcpp.net/study/csharp/sp_ref.html
こっちも合わせて読んで。
図を特に。
0187デフォルトの名無しさん
2011/09/29(木) 22:50:55.56C++には参照はあるけど参照渡しなんて用語はないでしょ。
何が「ちゃんと理解できる?」だよ。
後ろ向きに鏡指差してるAA貼られるぞw
0188デフォルトの名無しさん
2011/09/29(木) 22:52:35.76あくまでジョークだからな。
#include <iostream>
void f(int *(&p)){
*p = 100;
}
int main(){
int i=0;
int *p = &i;
f(p);
return 0;
}
0189デフォルトの名無しさん
2011/09/29(木) 23:00:26.91それはでも、「C++ には抽象メソッドはない」(やってることは純粋仮想関数と一緒)という程度の話では。
ジョークどころか、わりあいに書きやすい印象を受けました。二重ポインタよりも受け入れやすい、と考える人もいるかも。
http://hibari.2ch.net/test/read.cgi/tech/1277860967/504
http://codepad.org/nHqWWH51
0191デフォルトの名無しさん
2011/09/29(木) 23:10:15.48C++、書きやすいのは確実に参照渡しの方だけど、
呼び出し側が値渡し(& なし)と区別つかないから、
呼び出し側が気づかずに関数内で値書き換わって嫌だって話も多々ある。
それが結局、関数の引数に参照使わない文化生んでた。
0192デフォルトの名無しさん
2011/09/29(木) 23:10:41.140193デフォルトの名無しさん
2011/09/29(木) 23:14:24.28呼び出し側が気づかない、っていうのは普通はないでしょ。
そんなことが起こるとしたら、関数の命名もしくは仕様そのものが腐ってる場合だけ。
0194デフォルトの名無しさん
2011/09/29(木) 23:16:03.53聞いたことないけど
0195188
2011/09/29(木) 23:18:48.94あらあらあら、実用してる人いるのか。へぇー。
書き換えないときは参照で書き換えるときはポインタ。っていう感じでしか考えたこと無いな。
まー、引数でやってきたポインタを書き換えるのあんまりスキじゃないのだけどね。
んー、値渡しの対象がオブジェクトだったりすると、コンストラクタが裏でうごめくのが嫌、というのと、でもポインタを渡すのも嫌、というのとで
int &f(const someclass &a, const someclass &b);
というなんだかよくわからない(わけでもないけれども)やりかたがスタンダードなんですね。最近知りました。
0197デフォルトの名無しさん
2011/09/30(金) 00:59:25.29C++では変数参照をポインタの値のように扱えるから事情が複雑だけど
参照渡しはごく一般的な言葉だろ
VBのByRefとかまんま
0198デフォルトの名無しさん
2011/09/30(金) 05:15:03.06ライブラリ使う側はほんと底辺だと思って作ったうえで、
さらにその斜め下をいかれるものよ。
でなきゃ、気づかないなんて心配しない。
0199デフォルトの名無しさん
2011/09/30(金) 05:17:53.19そうそう、const 付きなら何の問題もない。
それはそれで、const に対応するようにクラス書くのが大変なんだけど。
あと、その const& な引数を COM Interop とかで C# から見ると、
ref だらけになって悲惨なことに。
0200デフォルトの名無しさん
2011/09/30(金) 21:52:55.16C#を勉強するのにお勧めの本は何?
0201デフォルトの名無しさん
2011/09/30(金) 22:16:15.76MSDNを見ながらいきなり作れるはず
0202デフォルトの名無しさん
2011/09/30(金) 22:27:46.68ご愁傷様
0203デフォルトの名無しさん
2011/09/30(金) 22:42:38.88本とかいらん
0204デフォルトの名無しさん
2011/09/30(金) 22:53:12.49VBのみだとどんなもんなのかな?
0205デフォルトの名無しさん
2011/09/30(金) 23:10:55.21一応C#とVBの新機能の紹介のはずなのにVB完全無視どころかdisってた
0206デフォルトの名無しさん
2011/09/30(金) 23:13:20.34なんか老けたなw
0207デフォルトの名無しさん
2011/09/30(金) 23:19:00.38例えば↓みたいなLINQと2重ループで地道に探すロジックとどっちが処理早いんでしょう?
var ret =
from a in hogeAList
join b in hogeBList on a.Id == b.Id
select a.Name
0208デフォルトの名無しさん
2011/09/30(金) 23:19:40.070209デフォルトの名無しさん
2011/09/30(金) 23:20:24.900210デフォルトの名無しさん
2011/09/30(金) 23:25:48.911・2割、LINQ の方が遅い。
けども、ループで回す方が早いからって、一時配列作ってそれにコピーを作ったりしたら、
今度はメモリ効率悪くなるし、データ量多いと性能も落とす。
0211デフォルトの名無しさん
2011/09/30(金) 23:26:17.17ToLookup使うとか考えるべき
0212デフォルトの名無しさん
2011/09/30(金) 23:36:08.03俺の感覚ではほとんど変わらないと思うけど
微妙に興味があるんで実際に測ってみてくれ
0213デフォルトの名無しさん
2011/09/30(金) 23:43:58.23でも>>210の言うようにループだと、結果を溜めるための一時配列が必要なんですよね。
結局はLINQは万能ではなく場合によって使い分けろということですか。
だがFindAllメソッドだけはクソ便利すぎるのでどんな時でも使うのをやめない!
JavaもLINQパクって標準仕様にすればいいのに。
0214デフォルトの名無しさん
2011/09/30(金) 23:44:08.68メモリ効率や速度より読みやすさが一番大事だったりするよな
0215デフォルトの名無しさん
2011/09/30(金) 23:50:22.690216デフォルトの名無しさん
2011/09/30(金) 23:54:41.77へ?
Listクラスからなくなったことですか?
0217デフォルトの名無しさん
2011/10/01(土) 00:11:12.770218デフォルトの名無しさん
2011/10/01(土) 00:15:15.23ICloneableとか
0219デフォルトの名無しさん
2011/10/01(土) 00:48:47.34どう設計するのが正しかったんだろうか
0220デフォルトの名無しさん
2011/10/01(土) 00:50:04.520221デフォルトの名無しさん
2011/10/01(土) 00:53:12.461000件のリスト2つでの結果。Stopwatchクラスで計測。
LINQ:00:00:00.0002997
ループ:00:00:10.4558394
LINQのほうが圧倒的に早いんだけど、何か間違ってるのかな・・・。
必要ならソースはりますが。
0222デフォルトの名無しさん
2011/10/01(土) 00:58:32.82LINQの方、多分クエリ作っただけでクエリを実行してないだろ
0223デフォルトの名無しさん
2011/10/01(土) 01:13:55.71うあ。その通りです。しにたい。
LINQの結果のToList()メソッド呼べばクエリ実行されますよね?
でもLINQのほうが早い。謎です。
LINQ:00:00:00.0027321
ループ:00:00:00.1062660
0224デフォルトの名無しさん
2011/10/01(土) 01:18:26.81要するに馬鹿の考え休むに似たり、ある物はどんどん使うべきということだな
0225デフォルトの名無しさん
2011/10/01(土) 01:25:11.87それなら最適化されるのはわかる
==と普通の式みたいに書いてあると素直にラムダ式に変換されてしまって最適化されなそうに見える
0226デフォルトの名無しさん
2011/10/01(土) 01:29:49.35へ〜。なるほど。ありがとうございます。
>>208,210は嘘ってことですか。
やっと寝れる。
0227デフォルトの名無しさん
2011/10/01(土) 01:31:46.91あ、そうです。equalsです。
勢いで書いたので == って書いちゃった。
なんかぐだぐだになってすみません。
0228デフォルトの名無しさん
2011/10/01(土) 16:27:38.10嘘じゃあなくてさ、Joinのやっているようなことをちゃんと再現すれば、
余計なオーバーヘッドがなくて速い。
でも、ちゃんと色々考慮して正しく書ける人って存外少ないんだろうね、
だから、色々考慮してメソッド化されたLINQ to Objectsを使うのが大体正しい。
0229デフォルトの名無しさん
2011/10/01(土) 16:33:09.73同一人物が連投してるだろう
0230デフォルトの名無しさん
2011/10/01(土) 16:37:22.78ちゃんと色々考慮したものとLINQを実際に測定してみてくれ
0231デフォルトの名無しさん
2011/10/01(土) 17:36:01.67http://ideone.com/HkAaw
先行が若干不利なので正しく計るならもっと丁寧にやらなきゃだけど。
あと、結局、要になるのはToLookupなのでそこも自前で書けば、だけどまぁ面倒なので。
0232デフォルトの名無しさん
2011/10/01(土) 18:20:16.93つか両方とも十分な速さだから、これが律速になることは無さそうですね・・・
0233デフォルトの名無しさん
2011/10/01(土) 18:22:21.620234デフォルトの名無しさん
2011/10/01(土) 20:06:19.64whileし続けるありふれた挙動をさせたいとき、
bool is_thread_must_running = true;
と用意して
while(is_thread_must_running)
{
}
というスレッドを外部からis_thread_must_running = false
で終了させるコードをネットで見つけましたが、
単一の変数への読み出しのみ、
書き出しのみはアトミックであると保障されていますか?
(javaはたしかそうだったような気がしますが)
また、is_thread_must_running はここを見る限り、
http://msdn.microsoft.com/ja-jp/library/x13ttww7.aspx
volatile にすべきですよね?
0235デフォルトの名無しさん
2011/10/01(土) 20:21:04.88volatileは必要
0236235
2011/10/01(土) 20:21:54.600237デフォルトの名無しさん
2011/10/01(土) 20:25:18.95なるほど、ありがとうございました!
0238デフォルトの名無しさん
2011/10/01(土) 20:51:45.290239デフォルトの名無しさん
2011/10/01(土) 20:54:46.510240デフォルトの名無しさん
2011/10/01(土) 22:36:28.75Timerなんかで定期的に監視して、指定の時間経ったらSocket.shutdown()とClose()したら良いんですかね
それとも同期ソケットを別のスレッドで実行する形が定石なんでしょうか
0241デフォルトの名無しさん
2011/10/01(土) 23:42:45.250242デフォルトの名無しさん
2011/10/02(日) 19:47:52.17という名前空間の中のクラスを、N1だけ省略して N2.C と書いて使いたいです。
ソースコードの先頭に using N1; を書いたのですが、ダメでした。
完全に N1.N2.C と書くか、using N1.N2; として C と書くしかないですか?
0243デフォルトの名無しさん
2011/10/02(日) 19:56:29.290244デフォルトの名無しさん
2011/10/03(月) 00:05:43.240245デフォルトの名無しさん
2011/10/03(月) 00:09:01.36ランダムで数値作って奇数は-1偶数は+1とかやれば?
0246デフォルトの名無しさん
2011/10/03(月) 00:11:21.11スクリプト言語っぽく(new[]{-1,1})[random.Next(2)]とか
0247デフォルトの名無しさん
2011/10/03(月) 00:17:03.93==0と!=0は半々の確率なの?
0248デフォルトの名無しさん
2011/10/03(月) 00:20:54.680249デフォルトの名無しさん
2011/10/03(月) 01:09:11.50の人?まだ困ってたんだw
0250デフォルトの名無しさん
2011/10/03(月) 18:51:44.80たとえば、イベントオブジェクトを大量に発行するプログラム(ゲームとか)動かすときにメモリ使いすぎてボトルネックになるってことはないの?
メモリ食って動きが鈍くなるとか、ガベージコレクションが頻繁に起こって動きがカクカクするとかしないのかな?
0251デフォルトの名無しさん
2011/10/03(月) 19:12:05.75第0世代のGCは頻繁に動くけど非常に高速
重いのは中途半端に長生きするオブジェクトが引き起こす上の世代のGC
0252デフォルトの名無しさん
2011/10/03(月) 19:45:02.09■ このスレッドは過去ログ倉庫に格納されています