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

■ このスレッドは過去ログ倉庫に格納されています
2018/03/03(土) 15:09:05.75ID:SBEkwl3H
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、
質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。
なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください

>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。

■関連スレ
C#, C♯, C#相談室 Part95
http://mevius.5ch.net/test/read.cgi/tech/1508180530/
C#, C♯, C#相談室 Part93
https://mevius.5ch.net/test/read.cgi/tech/1492818720/
■前スレ
ふらっと C#,C♯,C#(初心者用) Part135
http://mevius.5ch.net/test/read.cgi/tech/1517749348/

■コードを貼る場合は↓を使いましょう。
http://ideone.com/
https://dotnetfiddle.net/

■情報源
https://msdn.microsoft.com/ja-jp/library/gg145045.aspx
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/index
https://msdn.microsoft.com/en-us/library/gg145045.aspx
http://referencesource.microsoft.com/
-
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
2018/03/24(土) 12:20:02.80ID:qA6u9GtS
俺はRustで書く
2018/03/24(土) 12:36:49.22ID:I8UGP+gf
>>463
VRが90fpsなんて無茶を求めて来なきゃ俺だってLINQとか使いたいよ
2018/03/24(土) 12:42:55.44ID:9NxgdLlD
Listの実装にもよるけどvector的ならインスタンス1つ増えるだけでしかも速やかに回収される
GCからみたらただの良い子だね
2018/03/24(土) 13:07:03.68ID:7/CvCtkV
要件違うんだから争いはしないでよね
2018/03/24(土) 13:12:57.55ID:l0JTVUuX
>>465
お前の自己紹介スレじゃないんで
2018/03/24(土) 14:15:34.65ID:gWAI6lWw
いくらLINQでも探索でGCガリガリなんてするわけないじゃん
470デフォルトの名無しさん
垢版 |
2018/03/24(土) 14:17:13.44ID:iw5iXVod
パフォーマンス追求するときは使わなきゃいいだけじゃん
何回目だよ
2018/03/24(土) 14:22:26.64ID:qA6u9GtS
何度でも言うよ
2018/03/24(土) 14:37:03.09ID:8uBzLhlU
>>470
だったら使うの止めてよ
パフォーマンスが要求されるところで使えないんでしょ
普通に組めばいい話じゃん
2018/03/24(土) 15:03:34.89ID:kwFJV00Z
コンパイラーによって最適化された結果リンクの方がパフォーマンスがいいときもある
勝手に使えないと決めつけるんじゃなくてちゃんと調べた方がいいよ
2018/03/24(土) 15:10:01.14ID:FeWoBRlr
>>473
その調査で生じる賃金はどこのどなたが払って下さるんですか?
2018/03/24(土) 15:13:32.64ID:o+lnSplR
今回はLINQ関係ないだろ
Listのメソッド使ったんだから

ラムダが嫌ならPredicateのdelegate渡せばいい
2018/03/24(土) 15:52:30.11ID:kwFJV00Z
リンクだろうとラムダ式だろうとパフォーマンスは実際にやってみないとわからないってのが言いたかった
こんな所でボトルネックなんてでないから好きに書けばいいと思うけど
477デフォルトの名無しさん
垢版 |
2018/03/24(土) 16:25:40.93ID:iw5iXVod
>>472
簡単だし楽だから使うよ
おまえは全部C++でやっとけよ
2018/03/24(土) 16:32:05.01ID:7/CvCtkV
どのくらいのパフォーマンスが必要なのかも分からないのにパフォーマンス必要だから止めろって奴何なの?
2018/03/24(土) 16:42:29.03ID:vRs+3qfJ
>>478
でも遅いことは確定なんだよね?
2018/03/24(土) 16:44:31.30ID:o+lnSplR
くだらないことで揉めるんじゃない
ただanyからのfirstは無駄だとは思う
2018/03/24(土) 16:55:19.70ID:dHFi9bQj
またはじまった
2018/03/24(土) 17:05:10.25ID:1VnhiIny
無駄というか作法的にイマイチ
IEnumerableは列挙するたびに結果が変わったり一度しか使えなかったりする実装もあり得るから、
終端操作を二度やるのは一般には良くないね
2018/03/24(土) 17:08:19.43ID:7/CvCtkV
>>479
何に対して何が遅いと言っている?

あと許容出来る遅さと許容出来ない遅さは区別することを前提でお願いね。
2018/03/24(土) 17:12:04.07ID:uMtlf+0x
質問でも回答でもないのなら他でやれ
2018/03/24(土) 17:32:20.25ID:vYyJGm6o
>>480
>ただanyからのfirstは無駄だとは思う

なんでそう思うの?
2018/03/24(土) 17:35:46.41ID:+6yqXiQK
>>485
本来同時に得られるはずの情報をわざわざ二度の処理で求めているからだろ
処理効率は別にしても、マルチスレッドとか考慮するとバグの元になる可能性もある
2018/03/24(土) 17:36:08.58ID:kwFJV00Z
anyで条件付きのループした後にfirstで同じことをするより、2回目は直接該当データを参照する方が早そうって感覚
2018/03/24(土) 17:42:42.62ID:1VnhiIny
列挙元の内容が変更されないことが保証されているのは列挙子が有効な間だけ(変更されたら列挙子が無効になる)
Anyの直後のFirstは新しい列挙子を使用して列挙をやり直すので、
前回から列挙元の内容が変更されていない保証は一般には無い
2018/03/24(土) 17:46:38.61ID:Yt7o4U/B
>>488
正しいよ
でもお呼びじゃないんだカス
静かにしててくれる?
2018/03/24(土) 18:01:34.62ID:kwFJV00Z
>>488
anyは存在確認でfirstはデータ取得が目的だから順序が変わっても問題なし
むしろfindindexからインデクサでデータ取得する時の方が大事になってくるかな
だから、>>461はいいけど、>>460は少し危ない気がする
2018/03/24(土) 18:04:19.15ID:0F1bgfLW
いや正しくないってw
別のスレッドでコレクションが変更される可能性があるならそもそもLINQは使えない。

LINQのメソッドが返す列挙子はオリジナルのコレクションのコンポジションに過ぎないことを
忘れちゃダメよ
2018/03/24(土) 18:06:03.71ID:0F1bgfLW
>>490
問題あるとかないとか以前に、同じコレクションを2回スキャンするのは
無駄だなと思うことはプログラマの最低要件だと思う
2018/03/24(土) 18:13:37.30ID:kwFJV00Z
>>492
別にそこは否定してないんだけど
また、リストや配列のメソッドはスレッドセーフじゃなかったと思うからanyがとか以前にロックしなきゃ駄目かな
それはまた別の話だから別に触れないけど
2018/03/24(土) 18:14:09.89ID:9NxgdLlD
こんな場合には使えないんだ!←わかる
だから絶対にどんな場合にも使うな!←キチガイ
2018/03/24(土) 18:16:14.46ID:vYyJGm6o
>>486
うーん、考え方としては理解できるんだけど、
現実問題としてintみたいにdefault値に0を返す型の場合で
whereでフィルタした結果に要素があるかないかで処理を分けたいときにどうしてるの?

>>455みたくnull許容型にキャストするのは一案だけど読みやすさは低くなるよね
2018/03/24(土) 18:41:22.21ID:RopZoVkn
>>495
場合によっては Enumerable.DefaultIfEmpty 使うものあり
2018/03/24(土) 18:45:31.61ID:Jt5uczDI
>>495
whereでフィルタかけたならそのリストを作って、countで判別でもよさそう
2018/03/24(土) 18:55:23.66ID:o+lnSplR
いやそれこそ無駄だよ
2018/03/24(土) 19:02:00.05ID:vYyJGm6o
>>496
例えば Where(…).DefaultIfEmpty(-1).First() みたいなこと?

>>497
それは遅延評価のメリットを完全につぶしてるよね
扱ってる型によってはcountでもO(1)で性能的な問題はない場合もあるだろうけど
2018/03/24(土) 19:29:35.04ID:RopZoVkn
>>499
> 例えば Where(…).DefaultIfEmpty(-1).First() みたいなこと?
そう。元のコレクションに -1 があったら使えないけど
2018/03/24(土) 20:06:30.63ID:WPuMsPfE
>>494
プログラマなんざ99%キチガイだから正しいだろ?
根拠あげろって?皆さんが根拠だろうにご冗談を
2018/03/24(土) 20:49:58.95ID:emfSYqOj
public static class MyLinqExtensions {
public static T? FirstOrNull<T>(this IEnumerable<T> s) where T : struct {
foreach (var i in s) return i;
return default(T?);
   // return s.Cast<T?>().FirstOrDefault();
}

public static void ForEach<T>(this IEnumerable<T> s, Action<T> a) {
foreach (var i in s) a(i);
}
}

class Program {
static void Main(string[] args) {
var s = new [] {7, 0, 1, 2, 13, 3, 4, 5};

var x = s.Where(i => i >= 11).FirstOrNull();
if (x != null) Console.WriteLine(x);

s.Where(i => i >= 11).Take(1).ForEach(Console.WriteLine);
}
}
503デフォルトの名無しさん
垢版 |
2018/03/24(土) 22:39:25.79ID:eOg1kWoS
俺、そんな大ごとになるようなことを聞いちゃったのかな・・・・・
2018/03/24(土) 22:41:42.98ID:Y93sH5Wg
このスレはlinqを異常に嫌っているおじいちゃんが生息してるから注意してね
2018/03/24(土) 22:43:55.34ID:Y8GXLzWd
>>503
週末よくある光景だから気にすんな
2018/03/24(土) 22:49:20.91ID:NMOsnRxi
WEBサイトのデータを取得するコードを書いているのですが
サーバのデータを書き換えて、クライアントからアクセスしても
キャッシュされた値が取得されてしまい困っています。

キャッシュポリシーというのでキャッシュしない設定が出来る様です。
以下コードを書きましたが、エラーが出てしまいます。

何が原因なのでしょうか?


using System.Net; //WebClient
using System.Net.Cache;

****************************************************

HttpRequestCachePolicy noCachePolicy = new HttpRequestCachePolicy(HttpRequestCacheLevel.NoCacheNoStore);
request.CachePolicy = noCachePolicy;

******************************************************

エラー
Error 8 The type or namespace name 'HttpRequestCachePolicy' could not be found (are you missing a using directive or an assembly reference?)
Error 11 The name 'request' does not exist in the current context
Error 10 The name 'HttpRequestCacheLevel' does not exist in the current context
2018/03/24(土) 22:57:42.79ID:ADnClyNC
>>506
コードも張らないとアドバイスできんがな
2018/03/24(土) 23:01:20.44ID:NMOsnRxi
>>507



WebRequest req_1 = null;
req_1 = WebRequest.Create(str_url);
res = req_1.GetResponse();

でWEBサーバに設置したデータを取得しています。
2018/03/24(土) 23:03:09.08ID:S2nO/hPq
>>506
https://msdn.microsoft.com/ja-jp/library/system.net.cache.httprequestcachepolicy(v=vs.110).aspx
HttpRequestCachePolicy noCachePolicy = new HttpRequestCachePolicy(HttpRequestCacheLevel.NoCacheNoStore);
WebRequest request = WebRequest.Create(uri);
request.CachePolicy = noCachePolicy;
uriに文字列設定したら普通にビルド通るけど、他に何やってる?
2018/03/24(土) 23:04:36.74ID:NMOsnRxi
>>509
ありがとうございます。
凡ミスしてました!

using System.Net.Cache;

を別のソースファイルに書いてました、、、
2018/03/24(土) 23:07:50.50ID:bzBaKL6p
なぜいまどきWebRequest?
2018/03/24(土) 23:11:22.61ID:NMOsnRxi
エラーは消えましたが、WEBサーバ上で書き換え前の値が取得されてしまいます。
うーん、キャッシュポリシーの設定はあっているはずなのですが。
HttpRequestCachePolicy noCachePolicy = new HttpRequestCachePolicy(HttpRequestCacheLevel.NoCacheNoStore);
request.CachePolicy = noCachePolicy;
2018/03/24(土) 23:13:30.74ID:NMOsnRxi
>>511
今ナウいのは何に使うんですか?


WEBサーバ上にはというファイルをおいてます。
[ hoge_status.dat ]
1,aaa
2,bbb
3,ccc

そして、サーバ上で「2,bbb」→「2,babaa」に
書き換えて、クライアント(C#)から上のコードを実行した時に
「2,bbb」が取得されてしまいます。
2018/03/24(土) 23:16:00.40ID:rHDBuOYV
https://code.i-harness.com/ja/q/81ef3
2018/03/24(土) 23:24:46.34ID:NMOsnRxi
ありがとうございます。
サイトに記載の内容を参考に↓のコードを書きました。


namespace ns_test
{
public class c_udoxn
{
[DllImport("WinInet.dll", PreserveSig = true, SetLastError = true)]


Error 29 The type or namespace name 'DllImportAttribute' could not be found
(are you missing a using directive or an assembly reference?)

すると今度は、DllImportAttributeが見つからないというエラーがでます。
何か間違っていますか?
2018/03/24(土) 23:27:01.58ID:NMOsnRxi
using System.Runtime.InteropServices; // DLL Import

これでエラー消えました。
2018/03/24(土) 23:32:05.55ID:NMOsnRxi
解決しました!!
ありがとうございました!
2018/03/25(日) 00:22:20.31ID:30He22WI
How can I view the allocation unit size of a NTFS partition in Windows 10?
2018/03/25(日) 02:55:25.41ID:QkJGWpF+
>>518
fsutil fsinfo ntfsinfo
2018/03/25(日) 02:58:05.04ID:Z3IDZNHN
>>511
>>513
いまだとHAPかな?
521デフォルトの名無しさん
垢版 |
2018/03/25(日) 03:08:23.05ID:eoB6ZVmc
特定のクラスのインスタンスを探したり列挙したりすることって出来ないのでしょうか?

A a = A();//オブジェクトの生成をどこかに記録するとか面倒なこと無しに
A b = A();
A c = A();
FindObjects(A).ForEach(・・・・・);//雰囲気としてはこんなことがやりたいんです
522デフォルトの名無しさん
垢版 |
2018/03/25(日) 03:09:02.83ID:eoB6ZVmc
嗚呼、今見たらnewが抜けてた・・・・
523デフォルトの名無しさん
垢版 |
2018/03/25(日) 06:50:33.94ID:ODva5YKs
コンパイラの選択次第で出来上がりの性能でそんなに変わる?
2018/03/25(日) 07:44:12.53ID:iS73Z4MS
>>521
できない
お前が言ってるのを実現してしまったら、
var a = new Message(text: "うんこ");
a.Print(); //textに渡した内容を出力する
で一行目と二行目の間にaの内容が勝手に他所から書き換えられている可能性を常に考慮しないといけなくなるんだぞ?
初心者ならピンとこないかもしれないけどね
初心者がプログラミング言語を学ぶときは常に以下のように考えることが大切
・これを作った人は自分より遥かに頭が良く経験豊富である
・普通の方法でできないのは、それが悪いことだから
2018/03/25(日) 08:04:35.72ID:vPJlyNvz
>>521
コンストラクタでどこかに記録しときゃいいだけじゃね?
任意のクラスでやりたいならコンパイラに手を入れるなりしないと無理
2018/03/25(日) 09:55:55.34ID:Z3IDZNHN
>>521
生成後、List<A> Alistにaddすれば可能。
2018/03/25(日) 10:33:10.02ID:sIW0PrXb
グローバル変数が大好きなんだな
2018/03/25(日) 10:36:47.24ID:XLrMHO3h
時代はグローバル
2018/03/25(日) 10:37:55.50ID:5WPMat6H
>>521
class A{
 public static readonry List<A> allList = new List<A>();
 public A(){
  allList.Add(this);
 }
 public void Dispose(){
  allList.Remove(this);
 }

自分ならこうやってクラス内のstaticに入れておく
2018/03/25(日) 10:40:15.38ID:BGDDphgd
>>521
参照するだけなら自分に属しているフォームやクラスは列挙できるだろ
あとは名前で探せよ
2018/03/25(日) 10:54:23.63ID:5WPMat6H
明示的にDisposeを呼ぶのが面倒というなら、
リストに入れるのを弱参照にしてデストラクタを実装すれば全自動に出来るよ
2018/03/25(日) 10:57:31.10ID:BGDDphgd
>>531
探して代入したものでDisposeやCloseもできる。インスタンスの書き換えはできない
521が何のためにやりたいかによる
2018/03/25(日) 11:09:02.92ID:Ol/c1EKt
レガシーシステムで一番困るのはグローバル変数
これ以外は簡単にリファクタリング出来るがグローバル変数だけは簡単にはいかない
2018/03/25(日) 11:20:06.56ID:vPJlyNvz
普通の知能持ってたら>>529みたいにクラス内のスタティック変数でやると思う
グローバル連呼してる奴は知能足らなさすぎじゃね?
2018/03/25(日) 11:21:28.40ID:Kz38QhUD
他言語のグローバル変数マンがpublic staticマンになる
2018/03/25(日) 11:31:07.75ID:sIW0PrXb
>>534
ただ、
UnkoWorld-●UnkoArea-●Unko
みたいな関係にしたくなったとき
それでやってると
ウンコみたいにウンコウンコになるんちゃう?
2018/03/25(日) 11:34:42.78ID:Ol/c1EKt
>>534
パブリックなら同じ
最初に書くときにらくだからって堕落して思考停止してグローバルを使うと
だんだん考える力が衰えてこういう判断ができなくなる
2018/03/25(日) 11:40:28.11ID:Ol/c1EKt
パブリックスタティック書くお^q^
グローバル連呼は知能がたらないお^q^
ぼくはかしこいんだお^q^
おっおっ^q^


これがグローバル変数を使う人間の末路です
恐ろしですね
539デフォルトの名無しさん
垢版 |
2018/03/25(日) 11:42:06.07ID:hyW7/lyL
末期やな>>538のグロ厨
2018/03/25(日) 11:42:40.12ID:sIW0PrXb
俺も一瞬いいかな?
とか思ったけどpublicにされた時点ですべてが駄目なことに気づいた
2018/03/25(日) 11:45:41.52ID:/CvrewET
具体的にどういうときにそうしたくなるか書いてあればヒントがでてくるかもしれないけど
一般的になんでもかんでもそうしたいと言うのはNGだと思う
2018/03/25(日) 11:53:10.41ID:yM5ntbb+
>>529のケースだとpublicにする必要ないよね
2018/03/25(日) 11:58:50.34ID:/CvrewET
ローカルで使い捨て目的でAを作ったとしても
明示的にdisposeしないと消えない
c++のnew deleteのメモリリーク問題を回避するためにガベージコレクションの仕組みができたのに
また逆戻りするだけ
2018/03/25(日) 12:01:37.82ID:Ol/c1EKt
privateならOKってのも短絡的だよな
独立に生成したはずのオブジェクト同士が外から見えない部分で密かに連携し合っているとか破滅の臭いがプンプンするぜ
2018/03/25(日) 12:02:42.33ID:sIW0PrXb
>>542
>>529はNG
こうやって使いたくないときもこうなっちゃうじゃん
static抱えちゃうのは悪手
2018/03/25(日) 12:10:21.24ID:/CvrewET
public じゃなかったらどうやって要素を列挙するんだよ
2018/03/25(日) 12:15:08.82ID:sIW0PrXb
>>546
多分仕様がウンコ
客と詰めきれてない
コードばっかり見てるとバカになるやつの典型
外の空気でも吸ってきたらよい
2018/03/25(日) 12:16:49.43ID:vPJlyNvz
>>546
えっ? w

まあパブリックにしても外部から書き換えられないなら大抵は問題ない
>>537とかはパブリックと言うだけで思考停止してる老害なんだろうな
2018/03/25(日) 12:20:32.55ID:/CvrewET
>>548
えじゃねーよ
考えてなかっただろ
2018/03/25(日) 12:22:41.04ID:yM5ntbb+
>>545
フレームワーク側でstaticをガンガン使ってるけどそれには文句言わないの?
551デフォルトの名無しさん
垢版 |
2018/03/25(日) 12:26:42.83ID:eoB6ZVmc
そうか、>>521で書いちゃったのが実現できるようにすると、いつまでもインスタンスへの到達可能性が残ってGCが機能しなくなるのか
全然わからなかったわ
2018/03/25(日) 12:27:48.76ID:/CvrewET
>>551
そういうこと
目的を絞った特殊な状況でしか使えない

一般的に使うのはNG
553デフォルトの名無しさん
垢版 |
2018/03/25(日) 12:29:14.40ID:hyW7/lyL
>>551
ならんわw
2018/03/25(日) 12:42:56.52ID:PVODPgu2
いつもそうだけど、本質を少しも突かない頭の悪いやり取りしかないねw

論点は>>521,>>529的な仕組みが必要になるケースがあるかどうか。
俺はないことはないと思う。

ただ、揚げ足取りかもしれんが、>>529はList<T>をそのまま公開してるのはまずい
2018/03/25(日) 13:09:44.61ID:5WPMat6H
>>554
実際やるときはさすがにprivateにしてstatic ForEachを実装するし、
ライブラリ化するならセーフティとしてリストをWeakReference<T>にしてデストラクタで自動削除するよ
ただ掲示板でそこまで長々と書く気はないだけで
556デフォルトの名無しさん
垢版 |
2018/03/25(日) 13:13:01.00ID:Tb46nDVy
指定の時刻を過ぎたらbackgroundworkerを止める仕組みを作りたいのですが
なにかおすすめの方法はありますでしょうか?
2018/03/25(日) 13:27:59.98ID:lVxRvEma
>>555
クラスの扱いの話がクラス自身を変更しちゃってる実装に違和感
2018/03/25(日) 13:51:57.79ID:JPEij3S4
>>556
それだけだとどこで時間を確認するべきかすらわからん
仕様きちんと決めてから質問して
2018/03/25(日) 13:55:31.94ID:5MzIJnBg
>>549
はあ?
そう言うイテレーター作るだけだろ w
2018/03/25(日) 14:09:46.22ID:5MzIJnBg
>>551
デストラクタでリストから外せばいいだけ
もしくはIDisposableにしてdispose( )で外すとかでもいい
2018/03/25(日) 14:39:30.42ID:HUiARVtR
>>560
参照が残った状態でデストラクタが働くの?
2018/03/25(日) 14:41:03.20ID:5WPMat6H
>>561
世の中には弱参照というものがあってな
2018/03/25(日) 15:22:13.04ID:Ol/c1EKt
そういやここ初心者スレだったか
>>548みたいなのも居るか
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況