1 :
デフォルトの名無しさん :
2010/09/18(土) 10:57:11
クラスでラッピング楽しいじゃん
メモリマップドファイル方式(実際に使うときだけマッピング)の配列をインデクサ でアクセスして、が一番無難な気がする。仮想領域サイズにも優しいし。
C#でテキストエディタ作るのはウルトラバカ?
あずきってterapadみたいなもんじゃん
>>4 誰気にすることなく作りたいものを作ればヨシ
WPFで書かれたテキストエディタコンポーネントなら欲しいな WPFアプリケーションにGDIを使ったテキストエディタを埋め込むと違和感が出るから
前スレで X64 環境でも 2G/4G を越えられない。の話をした者です。 どうも CLR の実装で X64 モードでも 32bit の制限が存在するようです。 しかしだとしたら X64 の存在意義が微妙ですね
あらら
11 :
デフォルトの名無しさん :2010/09/18(土) 14:33:26
>>9 でもさ・・・
配列として大きく確保できなくても分割すれば扱えるんだから
その辺はかなりの物じゃないの?
メモリに置けないからってストレージにアクセス行くことを考えると
クラスで管理することのコストなんてかなり小さいと思うけど
そもそも、CLRにはLOHの問題があるので、 巨大なメモリ領域との相性が悪い 分割のオーバーヘッドが気になるような処理は アンマネージドでやれって事なんだろう WPFも画像処理はみんなアンマネージドだしね > しかしだとしたら X64 の存在意義が微妙ですね 巨大なアンマネージドメモリを使おうとすると、32bitモードは使い物にならないよ
>WPFも画像処理はみんなアンマネージドだしね そうだったのですか。 「すこし」大きめの BLOB データを扱うデータベースアプリの作成が目的だったのですが X64 で動かせばマネージドで処理できる。というのが間違いだったようですね。 こりゃ、考え直さないといけないですね。 ありがとうございました
http://ideone.com/8O9tS を書いてみたんだけど、CreateFromFile がコケる…
System.ApplicationException: MemMapArray.new() error ---> System.IO.DirectoryNotFoundException: パスの一部が見つかりません。
場所 System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
場所 System.IO.MemoryMappedFiles.MemoryMappedFile.CreateCore(SafeFileHandle fileHandle, String mapName,
HandleInheritability inheritability, MemoryMappedFileSecurity memoryMappedFileSecurity, MemoryMappedFileAccess access, MemoryMappedFileOptions options, Int64 capacity)
場所 System.IO.MemoryMappedFiles.MemoryMappedFile.CreateFromFile(String path, FileMode mode, String mapName, Int64 capacity, MemoryMappedFileAccess access)
場所 System.IO.MemoryMappedFiles.MemoryMappedFile.CreateFromFile(String path, FileMode mode, String mapName, Int64 capacity)
場所 MemoryMap.MemMapArray`1..ctor(Int64 size) 場所 C:\User\VS2010\Projects\test\MemoryMappedArray\MemMapArray.cs:行 26
--- 内部例外スタック トレースの終わり ---
場所 MemoryMap.MemMapArray`1..ctor(Int64 size) 場所 C:\User\VS2010\Projects\test\MemoryMappedArray\MemMapArray.cs:行 29
場所 MemoryMappedTest.Program.Main(String[] args) 場所 C:\User\VS2010\Projects\test\MemoryMappedTest\Program.cs:行 10
file = "C:\\Users\\<ユーザ名(英数字のみ)>\\AppData\\Local\\Temp\\tmp61C6.tmp"
またWindows7なんだけど、もしかしてVista以降だとPath.GetTempFileName()が使い物にならなくなってる?
15 :
デフォルトの名無しさん :2010/09/18(土) 16:07:55
UACの関連とか?
ああ、いや、File.Delete() とかは使えてるから、MemoryMappedFile がユーザ別の フォルダに対応していないのか。
delfhe?そんなような名前の言語とC#でテキストエディタ作るならC#はがいい?
日本語で
日本語でテキストエディタ作るの ひまわりとかか
>>14 ファイルが空っぽ(長さ0バイト)なんだから当たり前じゃないのかそれ....
ファイル名指定は駄目そう、と見切りつけて FileStream 版。
http://ideone.com/zzNU9 でも、new MemMapArray<int>(100) で・・・
System.ApplicationException: MemMapArray.new() error ---> System.IO.IOException:
このコマンドを実行するのに十分な記憶域がありません。
場所 System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
場所 System.IO.MemoryMappedFiles.MemoryMappedFile.CreateCore(SafeFileHandle fileHandle, String mapName, HandleInheritability inheritability, MemoryMappedFile
Security memoryMappedFileSecurity, MemoryMappedFileAccess access, MemoryMappedFileOptions options, Int64 capacity)
場所 System.IO.MemoryMappedFiles.MemoryMappedFile.CreateFromFile(FileStream fileStream, String mapName, Int64 capacity, MemoryMappedFileAccess access, Memory
MappedFileSecurity memoryMappedFileSecurity, HandleInheritability inheritability, Boolean leaveOpen)
場所 MemoryMap.MemMapArray`1..ctor(Int64 size) 場所 C:\User\VS2010\Projects\test\MemoryMappedArray\MemMapArray.cs:行 25
--- 内部例外スタック トレースの終わり ---
場所 MemoryMap.MemMapArray`1..ctor(Int64 size) 場所 C:\User\VS2010\Projects\test\MemoryMappedArray\MemMapArray.cs:行 29
場所 MemoryMappedTest.Program.Test(Int64 size) 場所 C:\User\VS2010\Projects\test\MemoryMappedTest\Program.cs:行 11
引数勘違いしてるのかな?_| ̄|○
>>14 > File.Create(file).Close();
ただ単に、
ファイルが作られる前にcloseしてるだけじゃないの?
書き間違い… ファイルが作られる前にcloseしてるからじゃないの?
ん、同じ容量で作っておかないと駄目?それはそうかも、と
http://ideone.com/xnBcs しかし
System.ApplicationException: MemMapArray.new() error ---> System.IO.DirectoryNotFoundException: パスの一部が見つかりません。
場所 System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
場所 System.IO.MemoryMappedFiles.MemoryMappedFile.CreateCore(SafeFileHandle fileHandle, String mapName, HandleInheritability inheritability, MemoryMappedFile
Security memoryMappedFileSecurity, MemoryMappedFileAccess access, MemoryMappedFileOptions options, Int64 capacity)
場所 System.IO.MemoryMappedFiles.MemoryMappedFile.CreateFromFile(FileStream fileStream, String mapName, Int64 capacity, MemoryMappedFileAccess access, Memory
MappedFileSecurity memoryMappedFileSecurity, HandleInheritability inheritability, Boolean leaveOpen)
場所 MemoryMap.MemMapArray`1..ctor(Int64 size) 場所 C:\User\VS2010\Projects\test\MemoryMappedArray\MemMapArray.cs:行 29
--- 内部例外スタック トレースの終わり ---
場所 MemoryMap.MemMapArray`1..ctor(Int64 size) 場所 C:\User\VS2010\Projects\test\MemoryMappedArray\MemMapArray.cs:行 33
場所 MemoryMappedTest.Program.Test(Int64 size) 場所 C:\User\VS2010\Projects\test\MemoryMappedTest\Program.cs:行 11
FileStream 渡してるのに DirectoryNotFoundException ってナニソレ・・・
this.size = size; これって何?
インスタンス変数のfileにメソッド引数のfileを代入。 Dispose()でファイル抹消するため。
あ、サイズか。同様。SetValue()とかで範囲チェックするため。
あーsizeって引数なのかごめんw
>>27 とりあえず、MemoryMappedFile.CreateFromFile のmapNameパラメータに
Path.GetTempFileName()で取得したパスを指定しているのは変だと思う。
33 :
24 :2010/09/18(土) 17:41:50
まことにすまんかったw ちゃんと見てませんでした さて… では答えは? mapName 型 : System.String メモリ マップト ファイルに割り当てる名前 をファイルネームと勘違いしているから! これは任意の文字列でいい ただ、これには使っていい文字とダメな文字があるはず。それを使ってるからアウト と書いてるうちに誰かがレスしてるね…
winapi32のCreateFileMappingを使ってるはず 名前を指定するのは共有メモリとして使いたい場合
そんなモンは任意の文字列とは言わんw
とはいえ、マニュアルが言葉足りないのは常。nullに変更。
http://ideone.com/aOfRy 進んだけど、今度は CreateViewAccessor() で…
System.UnauthorizedAccessException: パスへのアクセスは拒否されました。
場所 System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
場所 System.IO.MemoryMappedFiles.MemoryMappedView.CreateView(SafeMemoryMappedFileHandle memMappedFileHandle, MemoryMappedFileAccess access, Int64 offset, Int64 size)
場所 System.IO.MemoryMappedFiles.MemoryMappedFile.CreateViewAccessor(Int64 offset, Int64 size, MemoryMappedFileAccess access)
場所 System.IO.MemoryMappedFiles.MemoryMappedFile.CreateViewAccessor(Int64 offset, Int64 size)
場所 MemoryMap.MemMapArray`1.SetValue(Int64 index, T value) 場所 C:\User\VS2010\Projects\test\MemoryMappedArray\MemMapArray.cs:行 49
場所 MemoryMap.MemMapArray`1.set_Item(Int64 index, T value) 場所 C:\User\VS2010\Projects\test\MemoryMappedArray\MemMapArray.cs:行 41
場所 MemoryMappedTest.Program.Test(Int64 size) 場所 C:\User\VS2010\Projects\test\MemoryMappedTest\Program.cs:行 10
はて、FileStream渡してるのになぁ。
スタックトレースのコピペがうざい。 初心者スレ行けば?
初心者スレでもお断り過ぎる
ファイル名での指定ではc:\usr\tmp.datとかにしても、マップ名にnullを指定しても、
相変わらず「パスの一部が」で駄目と確認。
http://ideone.com/t0PJ5 System.ApplicationException: MemMapArray.new() error ---> System.IO.DirectoryNotFoundException: パスの一部が見つかりません。
場所 System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
場所 System.IO.MemoryMappedFiles.MemoryMappedFile.CreateCore(SafeFileHandle fileHandle, String mapName, HandleInheritability inheritability, MemoryMappedFile
Security memoryMappedFileSecurity, MemoryMappedFileAccess access, MemoryMappedFileOptions options, Int64 capacity)
場所 System.IO.MemoryMappedFiles.MemoryMappedFile.CreateFromFile(String path, FileMode mode, String mapName, Int64 capacity, MemoryMappedFileAccess access)
場所 System.IO.MemoryMappedFiles.MemoryMappedFile.CreateFromFile(String path, FileMode mode, String mapName, Int64 capacity)
場所 MemoryMap.MemMapArray`1..ctor(String file, Int64 size) 場所 C:\User\VS2010\Projects\test\MemoryMappedArray\MemMapArray.cs:行 32
--- 内部例外スタック トレースの終わり ---
場所 MemoryMap.MemMapArray`1..ctor(String file, Int64 size) 場所 C:\User\VS2010\Projects\test\MemoryMappedArray\MemMapArray.cs:行 35
場所 MemoryMappedTest.Program.Test(Int64 size) 場所 C:\User\VS2010\Projects\test\MemoryMappedTest\Program.cs:行 9
mainの中でやりたい処理だけを書いたような、ちっこいプログラムなら見る気もするけど、 意味なくクラスとか使ってるんで、見る気なくした。
質問者じゃないけど、そんな「ほのめかし」要らないだろう。 わからないのなら黙っとけ。 わかりもしねえのに口調だけ上から目線とか馬鹿じゃなかろうか
知識なくても42みたいに俺わかってるんだぜアピールレスできるもんな誰でも
例の精神障害者じゃないの
人違いだ
ゆとりどもめ
>>38 >mmf = MemoryMappedFile.CreateFromFile(file, FileMode.Open, file, tsize*size);
直してないだろ
>>39 ユーザーフォルダではかけるでしょ
次のコードを記述し特定ディレクトリを開く事が出来ました。 しかし、既にそのディレクトリがエクスプローラー上で 開かれている場合には開きたくありません。 どの様にすれば、 タスクバー上に既に特定ディレクトリが開かれているかを判定する事が出来ますでしょうか? ProcessStartInfo psi =new System.Diagnostics.ProcessStartInfo(); psi.FileName = @"C:\"; psi.Verb = "explore"; Process.Start(psi);
ウィンドウ列挙して、Explorerかどうか&キャプションが特定ディレクトリかどうかを 判定すればいいんじゃね?
>>48 Windows API は使わずに.Netで提供されている機能を使用して
実現したいと思います。
では、Windows APIを使ってるエクスプローラーをプロセスから削除してください。
勝手に実現しろよボケェ
>>49 .NETで提供されている機能もWin32APIで実現されてるんだし
Win32APIを呼び出す機能も.NETで提供されてるよ?
まあExplorerの列挙ならShell32.dll使った方が便利だけど こういう時dynamicは本当に楽だな
質問者じゃないけどほのめかしはいいよ
.NETの機能だけじゃ無理。
>>52 うーんやっぱり.Netだけじゃムリポですか。
Windows API を使うとコードが汚くなるから嫌なのです。
> Windows API を使うとコードが汚くなる よく分からん発想だなぁ 適当にクラスとか作って隠蔽しちまえばいいじゃん?
>>57 コード内にAPI宣言等が存在する事自体が嫌い。
なんだいつもの荒らしか
俺は他人にわかりにくいソースが好きだから なるべくAPI使うよ
Silverlightで遊んでると本家.NETでPInvokeやアンマネージコード大嫌いになった
creategraphicsで取得したgはdisposeしたほうがいいですか?
なんのcreategraphicsかしらんけどControl.CreateGraphicsのことならYes まあControl.CreateGraphicsを使うことを見直す方が先かもしれんがな
なんでGCなのにいちいちdisposeしないといけないんだろうな 使えないなぁ
System.DrawingはアンマネージGDI+の非常に薄いラッパーだから仕方ない 文句があるならWPF使え
アンマネージリソースをWinFormsフレームワーク側できっちり管理してくれてれば BrushやGraphicsをDisposeしなくていいようにも作れたはずだよな 実際WPFだってもちろん最終的にはアンマネージリソース使うわけだけど WinFormsみたいに局所的な管理じゃなくてフレームワーク全体で管理してるから ほとんどDisposeは要らないようになってる
PenやFontやBrushは現状でも(Win9xでもない限り)現実には明示的にDisposeしなくても ほぼ無問題のようだけど、Graphicsは若干事情が違うんじゃないの? ランタイムが包括的に管理すればDispose不要にできるとかそんな性質のものとも思えんが
いやOSで管理できないとダメ 他のアプリのDCとか余裕で横取りできるから危ない
70 :
69 :2010/09/19(日) 18:56:57
>>58 だからさAPI呼ぶ専用のクラス作って
代替え案でたら置き換えればいいじゃん
>>68 DisposeはGCが走るときに通るから別に必ず呼ばなくてはいけないってことではない。
ただ少ない資源を明示的に管理したいときには呼びましょうねってこった。
いずれ廃棄されるけど、廃棄タイミングがわからないと、
次に使うときに困るものとかな。
初心者スレみたいな話題・・・
C++/CLIでラッパークラス作ってC#で呼び出せばいいじゃん
C#だけしかやってない人ってプログラマとしてのスペックは低そうだな
どれも均等にできない人よりマシ
VBプログラマとかってまだ生きてるの? .NET世代になって自分が出来ないのを棚にあげて.NETを糞扱いしてたよね
C#がここまで大きくなったのは意外だった 2.0くらいで消えると思ってたよ
>>77 まじでそうおもう?
仕様だってC++並みに太ってきてんだけどな。
C#だって思う通りの事やりたければ基盤の.NET
事だった相当調べないと実現できねーぞ。
おまえ単なる「奥深い」症候群じゃね?
さすがにC++並は無いわ
そうだね C++よりでかいし
84 :
75 :2010/09/20(月) 00:22:20
すまん、ちょっと前のAPIの話ね
比べてる時点で君らはC#だけのプログラマじゃないわけじゃん
まあこの程度の比較なら実際に使えなくてもできそうだけどな
きれいにまとめてるって意味では C++ よりずいぶん小さいし、 LINQ とかの高機能面みれば、C++ よりずいぶん進んでる部分もあるし。
>>87 どーでもいいがLINQまだ使った事が無いけど
便利?
便利で実用性があるなら勉強しようと思う。
クエリ構文は慣れないと難しいだろうけど Enumerableの拡張メソッドなんかは便利だよ
便利だけど、わからない人が一人いたら、つかえねぇ!!ってくらい。わからない人には黒魔術
世界で出回っている仕事の2,3割はC#になっているのは事実。
C#一番得意なのにJavaとC++の仕事しかしたことない
↑ それは得意とかいわん
一番得意だよ
↑ 実務経験が無いのに得意とかいってる奴は 童貞の癖してSEXは気持ちいいと言ってるのと同じ
わかってないなぁ
売春したことないけどSEXは気持ちいい
Parallel.Foreach使った場合って最小でどのバージョンの.netで動く?
>>93 お前は業務プログラマもしくは人事だろ
根っからのプログラマなら実務経験年数よりも実務外の経験値が強力な意味を持つことは(ry
実務何年たっても使えないヤツは使えないんだよ
そんな事を2chで語る無意味さを理解できない無能が何か言いたいようです↓
>>88 C# は実用性の塊だから安心していい。
なれたらむちゃくちゃ便利で、もう Java とか C++ 書けない。
Python とか Ruby には似たような機能あるけど
(yield 的な機能とか、メソッドチェインでデータ処理する機能とか)、
この手の言語の利用者も口をそろえて Java とか C++ は使いたくないって言うし。
>>92 2・3割はまだ言い過ぎかなぁ。
いまだ、Java の方が3倍くらい案件多いみたいだし。
最も、Java は下がる一方、C# は伸びる一方だけども。
抜くのは4・5年後かなぁ。
あと、組み込みとかゲームとか、C か C++ しか使えない環境もまだまだ多いし。
>>68 必ずしもGraphicsがGDI+のGraphicsと一対一で対応してる必要はないんだよね。
たとえばWPFでは、UI要素は実際に使用されてる間だけ内部でアンマネージリソースが割り当てられる。
フレームワーク的に都合の悪いAPIは最初から公開しなければいい。
薄いラッパーのメリットももちろんある。WinForms自体そういうコンセプトなのでそもそもどうしようもない。
その良し悪しは別。
いつかGCでdisposeされるならほっとこっと
ポインタと再帰が理解できないアホが何を使っても同じ
でっかい釣り針だなww 乗ってやろう。 そういう 106 は GoF すら知らないのであった・・・
あーあー、釣られちゃったよ
得意気にGoFとか言っちゃうのがまた痛々しいな
ゴフッ
/ ̄ ̄ヽ / (●) ..(● うるふです | 'ー=‐' i > く / ̄ ̄ヽ / (◎) ..(◎ ごふっ | 'ー=‐' i > く / ̄ ̄ヽ ┏┓ / (●) ..(● ┏┛ | 'ー=‐' i ・ > く _/ ,/⌒)、,ヽ_ ヽ、_/~ヽ、__) \
JavaはGoogle vs Oracleの一件とかあるからますます敬遠されるかもね
常識な用語を書くと得意気なのか。知らなかったよ。
SunとApache Harmonyが争そってたあたりから雲行きは既に怪しかった
乗ってやろう(ドヤ顔)のあたりで既に得意気だよな。 GoFはあまり関係ないと思う。
お前ら釣られすぎ
スレと関係ないんだけどさ、俺「釣り」とか「釣り師」っていうのは、 釣り師 ↓ . /| ←竿 ○ / | . (Vヽ/ | <> | ゙'゙":"''"''':'';;':,':;.:.,.,__|_________ | 餌(疑似餌)→.§ >゚++< 〜 の組み合わせだと思ってたんだけど、 最近自称釣り師がダイレクトで自分の本音を攻撃されて「釣れた!」とか 言ってるの多いよね。 これは、どっちかというと、 ,〜〜〜〜〜〜 、 |\ ( 釣れたよ〜・・・) | \ `〜〜〜v〜〜〜´ し \ ゙'゙":"''"''':'';;':,':;.:.,., ヽ○ノ ~~~~~|~~~~~~~ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ト>゚++< ノ) かと思うんだけど、どうよ?
Enumerable.Cast<T>ってT dest = (T)src;じゃないのね
TSource is TDestがtrueじゃないと駄目
違う、TSourceがobjectでもいいけど実際にTDestにキャストできないと駄目
というか
>>119 の言わんとしてることが分からない。
もしかしてexplicitのこと?
static IEnumerable<T> ExplicitCast<T>(this IEnumerable source) { foreach (object item in source) yield return (T)(dynamic)item; } var doubleValues = new int[] { 1, 2, 3 }.ExplicitCast<double>(); こういうこと? Select使えという話だが
画面(Form1)起動時に二重起動のチェックをして、 既に起動中のプログラムがある場合、 起動中のプログラムをアクティブにするという処理をしたいです。 色々調べて、↓を参考に作成しました。 すると、★印のところで、画面のハンドルが取れるときと取れない場合がありました。 ・取れる場合:起動中画面のVisibleがtrueで画面表示されている状態(アクティブではない)。 ・取れない場合:画面のVisibleがFlaseでタスクトレイにアイコンが表示されている状態。 前提条件として、画面(Form1)は閉じる処理を行うと、タスクトレイに常駐します。 画面の閉じる処理で行ってるのは、Visibleプロパティをfalseにしているだけです 取れない場合、どのようにすれば良いのでしょうか?
どうやって取ってんの?
127 :
125 :2010/09/21(火) 22:15:01
125の続きです。よろしくお願いします。 // 以下の名前空間をインポートする using System.Diagnostics; using System.Runtime.InteropServices; public class MyProcess { [DllImport("USER32.DLL", CharSet=CharSet.Auto)] private static extern int ShowWindow( System.IntPtr hWnd, int nCmdShow ); [DllImport("USER32.DLL", CharSet=CharSet.Auto)] private static extern bool SetForegroundWindow( System.IntPtr hWnd ); private const int SW_NORMAL = 1;
128 :
125 :2010/09/21(火) 22:15:57
126の続きです。よろしくお願いします。 /// ------------------------------------------------------------------------------------ /// <summary> /// 同名のプロセスが起動中の場合、メイン ウィンドウをアクティブにします。</summary> /// <returns> /// 既に起動中であれば true。それ以外は false。</returns> /// ------------------------------------------------------------------------------------ public static bool ShowPrevProcess() { Process hThisProcess = Process.GetCurrentProcess(); Process[] hProcesses = Process.GetProcessesByName(hThisProcess.ProcessName); int iThisProcessId = hThisProcess.Id; foreach (Process hProcess in hProcesses) { if (hProcess.Id != iThisProcessId) { ★ ShowWindow(hProcess.MainWindowHandle, SW_NORMAL); ★ SetForegroundWindow(hProcess.MainWindowHandle); return true; } } return false; } } [System.STAThread()] private static void Main() { // 同名のプロセスが起動していない時は起動する if (!MyProcess.ShowPrevProcess()) { Application.Run(new Form1()); } }
初心者スレ行けよ。
SPY++で見て、メインウィンドウがなければ無理。
よくありがちなのは、名前付きパイプで通信、とかそんなんだな。
Microsoft.VisualBasic.dll参照して Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase 派生させれば単一インスタンスも楽勝なんだが。コマンドライン引数も渡せるし。
SetForgroundWindowって今はBlinkしかしないんじゃなかったっけ
AttachThreadInput()すれば行けると思う。
GPLって面倒臭いんだね
そりゃ盗人(stole man)の法ですから
という自演を見た
>>139 アクティブウィンドウを切り替える権限を持ったプロセスから呼び出した場合は
点滅するのではなくて、アクティブウィンドウが切り替わる。
通常はアクティブなウィンドウを持つプロセスがこの権限を持っている。
この権限を持つプロセスは、ほかのプロセスに権限を与える事も出来る。
静的メソッド と インスタンスメソッド どっちの方が実行速度が速いですか? ※内部アルゴリズム等は全く同じとします。 個人的にはいちいちインスタンスを作ってから実行するのは面倒なので 静的メソッドをよく使っています。
変わらないんじゃね? ただし、なぜかメモリ使用量は静的メソッドの方が多くなるらしい
百万回呼ばれるとかでなけりゃどうせ誤差の範囲内。 プロファイル取ってボトルネックになってるとこをチューニングする時になってはじめて意識すれば十分。
たとえば string AddString(string a, string b) { return a + b; } こんなメソッドがあったとして、このメソッド呼び出しのオーバーヘッドと、メソッドの中で実際に行われる 文字列連結処理にかかる時間を比較するとどれくらいだと思う? たぶん1:数千とか1:数十万とかそんな感じだよ。 もしstaticに変えることでその1が0.5になったところで実際には全く速くならないの。
影響が出るようならMathクラスなんかstaticにしないだろう
だから結局どっちがはやいんだ? プログラム言語を作れるレベルの人に聞かないと拉致があかないかもね。
そう思うならここで聞くなハゲが。
メンバー専用エリアなんかでパスワードを忘れた場合に パスワード再発行すると思うんですが、下のような流れで 登録時のメールアドレス又はアカウントを送信 ↓ メールアドレスへパスワード変更フォームのアドレスを送信 ↓ フォームでパスワードの変更 ってのはどうやって実装するのがいいんでしょ。 めっちゃざっくりで申し訳ないんですがどういった手順で考えれば効率的でいいのかヒント教えてもらればうれしいんですが。 よろしくお願いします。
151 :
149 :2010/09/22(水) 18:05:29
>>150 そんなショボイ質問をする奴は作らない方が無難
ハゲには無理
っていうかその流れの通りに書けばいいだけだろ コード要求してるの?
ASPならPasswordRecoveryなんてのが
>>152 コードというよりは
153さんがいうような、これ使えばいいよっていうのを教えてもらいたかったもので。
>>153 ありがとうございます。参考にしてみます。
SocketSniffみたいなことをしたいのですがC#で出来ます? プロセス名からパケットを見たい
>>148 呼び出しだけ見れば、圧倒的にstaticが速い。高速化のためにstaticメソッドにしたりもする。
しかし、多くの場合は誤差の範囲。
>>156 ありがとうございます。
ようやくまともな方が現れてほっとしました。
SocketSniffの説明にDLLもサービスも必要なく単体で動作しますとある これで2000〜7まで対応するとなるとWinSockをフックしかないような
exe名を入れると、通信してるパケットがずらーっと出る それだけのC#のサンプルってないですか?
あるわけないだろ
SocketSniffのインポート関数にCreateRemoteThreadあるからフックで合ってるっぽいな。 サンプルがどうとか言ってるレベルで手を出せるものじゃないよ。
非仮想メソッドまたは静的メソッドの呼び出し →単一の呼び出し命令にコンパイルされる、最も高速な種類の呼び出しです。
>>164 初心者にも分かるようにURL先の内容を3行にまとめてください
>ほとんど変わんねーよ。 1行で纏まってると思うのですが…
二つあわせて3行だ
呼びだすところだけ見れば、2倍以上の差。
>>163 全く歯が立ちません><
sharppcap関係を見てます
それ"誤差の範囲内"の証明だよな。 2倍のコストなんて中身のコストに比べれば無いも同然。 結局 >プロファイル取ってボトルネックになってるとこをチューニングする時になってはじめて意識すれば十分。 って事じゃん
WCFでリモートのサービスを取得したい時、Uriが間違っていても その間違いがわかるのは、実際にサービス(のインターフェース) にアクセスしたときなんでしょうか? てっきり、ChannnelFactory<T>.CreateChannel()でエラーが出ると思っていた のです…。サービスにアクセスする前にUriの間違いを判別することは できないでしょうか。
そのアプリは実働中にサービスのエンドポイントがコロコロ変わるんですか?
無理だろ
176 :
デフォルトの名無しさん :2010/09/27(月) 17:21:44
すいません、スレチだということは分かっていますが・・・。 今、ASP.netのスレッドってないんですか? コーディングでなく環境周りの話なので、こちらでないことは十分に理解してるんですが、WebProg板にどーしても見つからんのです。
そんなとこで聞いたらPHPerに殴られちゃいます
ぴーえっちぱー
おっとADOだったw
C#やってるとスレタイが読めなくなってくるのかもな
構造体の効率についての質問です。 struct Big { long a, b, c, d, e, f, g, h, i, j; } struct A { struct Big big; } struct B { struct A a; } struct C { struct B b; } stcut C c; こういうのがあるとき、 c.b.a.big.aと値を参照するとき、 何度も何度もコピーされているのでしょうか。 こういうとき、省略される、安心しろ、 という記述もマイクロソフトの文書であったような気がしますが、 なにかあやふやです。ご存知の方はいませんか?
知らんけど XNAとかで問題になりそうよね 省略されてると思いたいな
>>183 フィールドならコピーされない。プロパティならコピーされる。
>>185 Microsoftのガイドラインは
MSDNの「クラス、構造体、およびインターフェイスの名前」
ま、「クラスライブラリ開発のデザインガイドライン」
つまり他のアセンブリから見える範囲のみの規定だから
そうでないなら好き勝手にしろ、と言うのがMicrosoftのスタンスだな
私はそれをそのままprivateなもんにも適用してるけど
> C#では、delegateを使う方がメジャーなのでしょうか?
引数と返値で完結するようなもんならdelegateでもいいんじゃない?程度
>>187 どうもありがとう!
> フィールドならコピーされない。プロパティならコピーされる。
これはJIT関係とみていいんでしょうか。
昔見たはずのマイクロソフト文章を探してるんですが、
.NET関係にも、msdn関係にも、どうも見当たりません。
どこかでそういうのを見たハズなんですが…。
189 :
185 :2010/09/27(月) 21:53:47
回答ありがとうございました。 参考にさせていただきます。
>>183 ,187,188
プロパティなら、そもそもその構文、コンパイル通らない。
ISerializableメンバを実装したオブジェクトをシリアライズしたものを デシリアライズするとき、コンストラクタが呼ばれずフリーズしてしまう ことがあります。調べると、staticフィールドがあるときに発生するようです。 これは、よく知られたことなのでしょうか?正直理由がわからないので、 どういう理屈か説明いただけないでしょうか?
単にそれだけならそんなことにはならないな
すみません。再確認したらstaticフィールドなしでも動かなかったり。 ToString()メソッドを消したら動いたり、継承クラスだったら動いたり と完全にわけがわかりません…。 ジェネリック型なのがまずいのでしょうか。
再現性のあるコードを出せ
テストに関して質問させてください。 NUnitを使ってテストをしているのですが、テストコードからinternal修飾子にアクセスできないため、とりあえず、internalでよいものもpublicにしてテストをしています これを、解決する上手い方法はあるのでしょうか? よろしくお願いいたします。
InternalVisibleToAttribute
ごめんちょっと間違えた、InternalsVisibleToAttribute
>>197 ありがとうございます。
Javaのときみたいに、reflection調べようかと思っていました。
助かりました。
実装ミスですよ
実装ミスかあ
Zip so miss....
( ゚д゚)ポカーン
クラス名とプロパティ名が被ってしまいます Size型を返すSizeプロパティとか かといってwindow.WindowSizeみたいに自明な接頭語付けるのは避けたい みんなどうしてるの
205 :
デフォルトの名無しさん :2010/10/01(金) 00:15:30
余裕でSize型のSizeプロパティ採用しますけど何か? Image.Sizeとかそんなんばっかりじゃん
1行目と2行目で指してるものが違うよね 1行目(クラス名=プロパティ名) class Size{ public object Size { get; set; } // これは無理 } 2行目(プロパティ名=型名) class TekitounaClass{ public Size Size { get; set; } // これはOK }
>>208 コピペ君って馬鹿だな。
>>204 確かに他の人が言うようにプロパティが型名と同じ名前でも何も問題はないけど、
特に自分のプロパティ経由して取得した値のメンバを読んでる場合とか、
型の静的メソッドに見えたりして一瞬思考を取られる感じがあるのも確か。
なので個人的には、やっぱりインターフェイスだけでなくクラスも構造体もEnumも
型名は全部プリフィクス付けるのがやっぱり良いような気がする。
まあこんなことしてる人は殆んど見たことないけど。
>型の静的メソッドに見えたりして一瞬思考を取られる感じが >あるのも確か。 お前だけ。少なくとも VS 上だと型は色分けされるから。
コピペ君って馬鹿だな。 の人が例のあの人だと最近気づいた
212 :
デフォルトの名無しさん :2010/10/01(金) 02:21:20
知らない方がいいだろ
おれも気になる
216 :
デフォルトの名無しさん :2010/10/01(金) 15:51:27
すいません。教えてください。 フォームのタイトルバーやフォームの枠を含めた左上と、フォームのクライアント座標の左上 との差分を取得したいです。 LocationとDesktopLocationを取得すればよいと思ったのですが、同じ値になっています。 MDIの子フォームなのですが、どのように取得したらよいでしょうか。
スクリーン座標に変換すると良いよ MDI子の左上座標は自分のLocationをMDI親のPointToScreenで変換 MDI子のクライアント座標は0,0を自分のPointToScreenで変換
218 :
216 :2010/10/01(金) 16:36:19
>>212 >>211 が被害妄想狂なんでしょw
なんかいつも見えない敵(だってそんなものは本当は実在しないから)と戦ってる奴なんて2chにはありふれてる。
>>208 みたいなガイドラインは少々デメリットがあろうが統一されてることに意味があるんだよ
>>220 クラスと同じ名前のプロパティーにべつにデメリットはないだろ。
コピペ君って馬鹿だな。の人は一瞬引っかかるそうだよ 知らんけど
コピペ君ってバカだなってスクリプトかと思ってた。 普通にしゃべれるんだ。
普段から喋ってるじゃねえか。
2つのリストボックス1、2があって リスト1で選択した項目をリスト2に移したいんですけど 複数選択時のリストの項目の削除の仕方がわかりませんでした 具体的にどんなコードを書いたらいいでしょうか?
for(int i = listBox.SelectedIndices.Count - 1; i >= 0; i ++) { listBox.Items.RemoveAt(listBox.SelectedIndices[i]); } ってのはどう? 動作確認してないけど
すまん、i--ね
i--じゃねーの
>>226 ありがとうございます
動作確認してませんけどw
学校いったら試してみます
230 :
204 :2010/10/01(金) 23:46:48
ありがとう 同じ名前ってなんかなーと思ったけどそれが普通なら受け入れるか
231 :
デフォルトの名無しさん :2010/10/02(土) 02:44:30
PanelのBorderStyleでFixedSingleを指定した場合、右側の線だけ消すとかはできないんでしょうか?
無理 Paintイベントで自分で書け 寝る
おはようございます。 VC#2008EEで、pictureBoxのsizemodeについて質問です。 状況説明をします。 SizeMode = Zoomに設定しています。 pictureBoxのペイントメソッドでpictureBoxの縦横をClientRectangleの値に書き換えます。 その後DrawImageしているのですが、Zoomの説明のとおりの動作をしません。 つまり、縦横比は保持したまま最大のサイズに補正してくれません。 以下その部分のコードです。何か足りていない等ありましたらご指摘をお願いいたします。 private void pictureBox1_Paint(object sender, PaintEventArgs e){ if (_img != null){ pictureBox1.Width = ClientRectangle.Width; pictureBox1.Height = ClientRectangle.Height; e.Graphics.DrawImage(_img, 0, 0, pictureBox1.Width, pictureBox1.Height); } } 以上、宜しくお願いいたします。
そりゃそうだ SizeModeはImageプロパティを使った場合にしか関係ない DrawImage使いたいんだったら自分で適切なサイズを計算して描画する もしくはBitmapに描画してからImageプロパティに設定
即レスありがとうございます。 そういう事だったのですね。 DrawImage使わずにpictureBox1.Image = _img; と再度することで解決しました。 DrawImage使いたいんだったら、という下りで気付かされました。 以下のようになりました。 private void pictureBox1_Paint(object sender, PaintEventArgs e){ if (_img != null){ pictureBox1.Width = ClientRectangle.Width; pictureBox1.Height = ClientRectangle.Height; pictureBox1.Image = _img; //変更箇所↓ //e.Graphics.DrawImage(_img, 0, 0, w, h); //変更箇所↑ } } 大変助かりました。ありがとうございました!!
どういたしまして 次回も期待してくれ
次回作にご期待ください
俺たちの戦いはこれまでだ
test
>>235 誰も突っ込んでないが、どう見ても3行ともPaintイベントでやる処理じゃないし
え
DataBindingの事で質問させていただきます class Class1 { public string Value { set; get; } } class Form1 : Form { Class1 c = new Class1(); public Form1() { InitializeComponent(); textBox1.DataBindings.Add("text", c ,"Value"); } } このようなソースを書いているのですが、いくらValueを変更してもtextBox1に反映されません。 どの部分がおかしいでしょうか?
Class1にINotifyPropertyChangedを実装する必要がある Valueのsetで現在の値と違う値が設定されようとしていたらイベントを発生させる 自動プロパティは使えない
それでどうやって変更されたことがtextBoxに伝わるんだよ
早い返答ありがとうございます
ttp://msdn.microsoft.com/ja-jp/library/system.componentmodel.inotifypropertychanged (VS.80).aspx
上記のページを参考にしつつ、下記のように変更することで解決しました
private string _val;
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(string info)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(info));
}
}
public string Value
{
set
{
if (value != _val)
{
_val = value;
NotifyPropertyChanged("Value");
}
}
get
{
return _val;
}
}
本当にありがとうございました
friendっぽい方法を思いついたんだけどどうだろう? 関数自体見えるからだめ? public class Test { private class KeyClass { } private static Type _Key = typeof(KeyClass); public class ClassA { private object obj = null; public bool Set(Type Key, object new_obj) { if (Key != _Key) return false; obj = new_obj; return true; } } public class ClassB { private object obj = null; public ClassB(object obj) { this.obj = obj; } public bool CopyTo(ClassA A) { return A.Set(_Key, obj); } } }
気持ち悪い
interface IHoge { void Hoge(); } class Foo { private string bar; private class Hoge : IHoge { public Foo foo; void Hoge() { retirm foo.bar; } } public IHoge CreateHoge() { return new Hoge { foo = this }; } } 教科書的にはこうやるのが正解
基本的にファイナライザは無効にしておいて、後でオブジェクトが特定の状態になった場合だけ ファイナライザの呼び出しを有効にしたいです。 普通にファイナライザを定義しておいてコンストラクタでGC.SuppressFinalize(this) 必要に応じてReRegisterForFinalizeというのは思いついたのですが、もっと良い方法があれば教えてください。
>>249 ファイナライザを呼ばれちゃいけない期間は参照を保持しておけばいいだろ。
もちろん黒の
254 :
249 :2010/10/06(水) 11:35:44
>>250 わかりにくくてすみません。GCは妨げたくありません。
今作ってるクラスでは、GCされた際にファイナライザを実行する必要がない状態と
実行してほしい状態があります。ほとんどの場合は常に前者なので、
ファイナライザが常に呼び出される状態にあることによる
パフォーマンスの低下を避けたいというのが目的です。
後で思いついたのですが、ファイナライザを実装するためのクラスを別に作って
ファイナライザが必要な時はそのインスタンスと相互参照させておけば綺麗に作れそうです。
TCPソケット通信についての質問 WindowsサービスアプリでTCPソケット受信を行いたい のですが何故か受信が出来ないためAcceptTcpClient() で応答が返ってきません。同じコードをFormアプリ でやると受信は出来ます。サービスアプリの場合は下記コード では無理ですか? OnStart() { Thread serviceMainThread = new Thread(func1); serviceMainThread.Start(); } func1 { Listener = new TcpListener(IPAddress.Any, 1111); Listener.Start(); TcpClient Client = Listener.AcceptTcpClient(); 〜受信時処理〜 }
その質問は初心者スレのほうがいいな
257 :
255 :2010/10/06(水) 12:46:15
初心者スレ行ってきます!
>>255 スレッド保持してないから
serviceMainThread.Start();
のあとすぐに終わるだけ
>>256 答えられないんだからROMっとけやクズ
260 :
255 :2010/10/06(水) 13:55:41
>>258 回答ありがとうございます。
すみません書き込んだコードがミスでした。
確かに書き込んだコードだとスレッド保持してないですね。
先程解決しましてポート解放がちゃんと出来ていなかった
のが原因です。
Form起動アプリだとファイアウォールのブロック解除の
画面が出てそちらで解除していたため受信出来ていただけでした。
失礼致しました。
261 :
デフォルトの名無しさん :2010/10/06(水) 14:52:04
__ __ /〃 | __ /\ _ | __ __ , -――-、 /\ノ ヽ/\l::::::::::::::::::::\ /: : / ,..-―-、/) |: : :|::::::::::::::::::::::/: : / /⌒Y (_ノ /) |: : :|:::::::::::::::::::::|: : : /  ̄l ̄l、 ) /`〉 ヽ:: :|::::::::::::::::::::l: : :/ l: : :`ー--‐'‐'´: :/ \|∧ハ/l/: ::〈 \: : : : : : : : : :く |: : : : : : : : : : `ー-┐ ,.、 l: : : : : : : : : :`ー―┐ ,、 |: : : : : : : : : : : : : : |二lニノ ヽ.: : : : : : : : : : : : : :|ニノ |: : : : : : : : : : : : : : | ヽ: : : : : : : : : : : : :| ヽ: : : : : : : : : : : / \: : : : : : : : :/ \ : : : : : : /  ̄ ̄ ̄ ̄ ノ|  ̄ ̄ ̄ ノ) ノしノ し'( ノ)__ノ (ノ( '――――-'′ '-――一-'′
ファイルがアクセス中ではないことを確認してからファイル名を変えたいのですが、いい方法は無いでしょうか? 現状は暫定として、IOExceptionをキャッチして一秒スリープさせてからファイル名を変更しています 何か良い方法は無いでしょうか?
それでいいんじゃね
別のスレッドでやるならいいんじゃね GUIスレッドでそれやったら確実にフリーズするが
>>226 それで動きました!
ありがとうございました!
266 :
262 :2010/10/07(木) 14:29:20
やっぱりその方法ですかねぇ 確実にエラーを出さない上に時間がかからない方法があれば良かったのですが・・・
アクセス中で無いことを確認してから名前を変更するまでの間にアクセスがあったらどうすんだよ この方法が普通だろ
ずーっとアクセス中だったらどうするの?
そのプログラムの仕様によるだろ エラーを報告するとか、永久に待ち続けるとか好きなように
諦めが肝心
272 :
262 :2010/10/07(木) 19:51:24
一秒スリープ後もアクセス中だったら諦めることにします 相談に乗ってくれてありがとうございました
>>272 そもそも本当に一秒待つ意味があるのかどうか考えた方がよくないか?
俺は全く無意味にしか思えないけど....
// おまじない
例外キャッチしたら諦めろよ・・・
キャッチアンドリリース
契っては投げ、契っては投げ
開いてるファイルを人間が編集して人間が閉じるんだったら1秒待つ意味は無いけど ファイルをプログラムが開いてプログラムが編集してプログラムが閉じるんだったら1秒待つ意味はあるんじゃないか
そんな特殊ケースが想定される状況だったらそういう作りでもいいんじゃない。 普通はやんないけど
280 :
262 :2010/10/08(金) 08:34:33
>>278 そんな感じです
自分の環境下では一秒待てば確実に名前を変更できるます
281 :
デフォルトの名無しさん :2010/10/09(土) 21:38:20
autoscrollが付いてるコントロールってフォームしかないんでしょうか?
具体的に何がやりたいのか言えよ
283 :
デフォルトの名無しさん :2010/10/09(土) 22:12:05
はみ出している部分をスクロールで表示させる。です。
んなもんはAutoScrollの存在を聞いてる時点でわかっとるわ Form以外で使いたいっていってんだろ 面倒だからもういいわ Panelにでも貼って使え
初心者スレと相談室スレはどちらがレベルの高い人が集まってますか?
回答者は同じだ
まったく意味無いよね
意味が無かったわけではない スレが活発で見辛くなるスレの場合、似たようなスレで分散化するという役割はあった 遅い進行の場合、意味が無いよな
C#,C#の宿題片付けます。のスレが意外とレベルの高い人が集まってる。
ここしばらくスレ停まってるけどね
初心者スレがもうすぐ埋まりそうなんだが 次立てるの?それともこっちに誘導する?
冗談じゃない
毎回誘導の話出るけど、馬鹿なの?
うん
上で分かれてる意味が無いって書かれてるんだが
で?
初心忘れるべからず
以前ここで、toolstripbuttonが謎の失踪をとげたと書いた者なのですが ご解答は 神隠し 以外でお願い致します。 いつも通り、ファイルをダブルクリックし、C#の画面を出して、 デザインとプログラムを表示させようとすると (指定したファイルは?)移動または削除された可能性があります。 と出てしまい、一切の編集・閲覧をすることが出来なくなってしまいました。 もちろん、移動も削除もまったくしていません。 ファイル自体はきちんと存在しています。 なのに、編集しようと.csをダブルクリックすると上記のメッセージが出てきます。 稚拙な文章で、わかりづらいかもしれませんが、 知恵をお貸し下さい。 非常に困っています。
神は言っている。ここでプログラミングをする定めではないと
蒸発
>>298 だから、下らない言い訳書いてる暇があったら、自分の書いた文章を最低10回は
読み返してちったあ推敲しろって本当。
拡張子が".cs"はC#のソースファイルだけど、それは理解してるの?
問題は拡張子が".cs"のファイルをダブルクリックしてもファイルの中身がVSのエディタに
表示されないってこと?
でも、C#のソースファイルを開いただけなら「移動または削除された可能性があります。」
なんてメッセージが表示されるはずがないと思うけど....
ソリューションを開いた後、ソリューションエクスプローラー上の.csファイルをダブルクリックしたら、かな。 C#つーかVisualStudioスレ向けでは
大方*.Designer.csがどっか逝ったかコピーし忘れたんだろ
丁寧なわかりにく文章と、ぶしつけだけどわかりやすい文章なら
絶対後者の方がいいという好例。
>>298 天狗の仕業じゃー
T4 Template凄いな Rubyなんかとは真逆を突っ走っててすばらしい
306 :
デフォルトの名無しさん :2010/10/14(木) 20:53:07
Enumerable.Intersect使いたいんだけど これ一回のためにIEqualityComparerをわざわざ作るの 少し面倒なんだけど 何かいい手はないのかな・・・? Func<T> predicate みたいなので条件をラムダ式でかけたら すごくスマートなんだけど・・・
ないよ
308 :
デフォルトの名無しさん :2010/10/14(木) 21:17:04
datagridview の datasourceに List<T>を入れています。 Tは自作クラスです。 List<T>が変更された場合 datagridviewをその変更を反映したいです。 そういうメソッド等ありますでしょうか? datasourceにセットしなおす以外でありますか?
>>306 そう言う汎用クラスを一つ作っておけばいい
コンストラクタの引数にFunc<T, T, bool>渡すようにして
>>308 DataGridView.Refreshでも呼ぶか、
BindingSourceを間に噛ませてResetItem/ResetBindingsする
List<T>の要素の追加削除じゃなくてTのメンバの変更なら
TにINotifyPropertyChangedを実装させてプロパティのsetでPropertyChanged発生させてもいい
IEqualityComparerにはGetHashCodeも必要 Equalsだけならラムダ式を引数にとるようになってただろうな
DataSourceがObservableCollection受け取れば万事解決なのに 使えねえ奴
WinFormsはv2.0以降放置だから仕方ない
308程度のことならBindingListで問題なさそうだけど、何が不満なんだ?
314 :
デフォルトの名無しさん :2010/10/14(木) 22:13:11
BindingListじゃ308の要件みたしてないだろw BindingListでどうやんだよw
「どうやるのか教えてください」だろ!
どうやるのか教えてください。
やなこった
318 :
314 :2010/10/14(木) 22:39:47
>>314 ソースとしてとしてList<T>を使ってるのに
さらにBindingListに入れなおすのか?
DataSourceセットし直しがやだっつってんのに
それ以上重いことさせんの?w
BindingSourceならそのまま入れれるけどさ。
まあDataSourceセットし直しがやだっつてるんだから
ResetBindingsも全更新だから
質問主の要件は満たしてないかもな
なんという自演
笑わせてもらった
あるあるwwwww 1人議論して間違った事言って識者に突っ込んで貰うのを待つパターンwwwww
そして質問者は逃亡。 自分の質問に対して数時間レスがないと催促するが、 自分からのレスは永久放置でもかまわないってかよ。
323 :
デフォルトの名無しさん :2010/10/16(土) 00:32:09
スレッドセーフなリストを探しています。 やりたいことは、 スレッド毎にページをダウンロードして ページの中にある複数の要素を取得し、リストに追加します。 最終的にすべてのページをダウンロード完了したら リストをソートします。 リストの条件としては ・ジェネリック ・スレッドセーフ ・ソート です。 該当するリストクラスはないでしょうか? 環境は3.5です。
4.0で入ったんだけどね。
作るのは楽そうだな
シンクロなんとかリストってクラスなかったか
んにゃ SynchronizedCollectionだったか
328 :
デフォルトの名無しさん :2010/10/16(土) 00:45:08
>>324 2008だと.NET4は無理ですよね・・・?
ちなみに4でのそのクラスはなんという名前なのでしょうか?
言っちゃ悪いけど、もうそんな質問してる時点で基本がまったく分かってないことが バレバレだよな。 こんな基本も理解せずにマルチスレッド使うなんてキチガイに刃物そのもの
331 :
デフォルトの名無しさん :2010/10/16(土) 01:50:22
>>330 PCが5年前のものなので仕方なしです。
BlockingCollection<T>なんての追加されたんですね
4なのが残念です。
>>329 323のどこら辺からどうして基本がわかってないと思われましたか?
もしただの煽りでないのなら教えて頂けるとうれしいです。
>>331 329は、かまってちゃんだから、throw new Exception()で、おね。
ドラッグ&ドロップでコントロールを移動したり外したりできるアプリがあるけど、あれは何使ってるんだ?
Win32API
>>332 through new Exception()がいいんじゃねw
>>331 PCが5年前でも2010入れればいいじゃない。
それは言い訳にならない。
普通にロックすればいいだろ
スレッドセーフの意味わかってるなら 3.5でも自分でどうとでも組めるだろ
プロデューサコンシューマパターンかと思ったけど違うみたいね また来るんじゃない? AddしたらSizeが2以上増える事があるんですけどって
自分でロックして管理できないようなら いくらコレクションがスレッドセーフでも絶対に他のところでトラブルを出すだろうな
ダウンロードが並列なだけなら単に List<T>#Add() の前後で lock すれば済むんじゃないの?
ソートって事はダウンロード完了まで待ってるやつがいるんだろ? だったらスレッドごとにリスト持たせて、後でマージした方が安全楽チン
>>323 そもそも、その処理ならスレッドセーフなリストは必要ない。
各スレッドが個別にリストを持てば済む話じゃないか。
どうせソートするんだから、そのとき一つのリストにまとめればいい。
うわ、思いっきりかぶった。
ジェネリックでスレッドセーフなコレクションなら System.Collections.Generic.SynchronizedCollection があるぞ。ソートできないけどね。
343とは仲良く出来そうだW
347 :
デフォルトの名無しさん :2010/10/16(土) 15:28:48
最近C#をはじめたJava屋なのですが、JavaのArrayBlockingQueueに相当するクラスってC#にありますか? できれば.NET Framework 2.0で動くやつがいいです。 要件は優先度が高い順に、 ・キューが空の場合、キューにエントリが追加されるまで待機し、キューの先頭を返す。 ・キューが許容値オーバーの時にキューに空きができるまで待機するメソッドがある。 ・スレッドセーフ ・Genrerics対応 です。
蹴り殺すぞ小僧
くだらなすぎるので以後放置で。
350 :
デフォルトの名無しさん :2010/10/16(土) 15:35:27
>>347 追記
「キューが空の場合、キューにエントリが追加されるまで待機し、キューの先頭を返す」をスリープ
しないでスレッドセーフに実装するのが自作だと大変そうなのです(あくまでもキューにエントリを
足したスレッドが、待機中のスレッドをひとつだけ、「必要に応じて」起こす実装がいいです)。
実装例があったらそれでもかまわないのですが・・
これで「屋」って、技術屋も質が落ちたな。
使ったことないけど.NET4のBlockingCollection<T>がまさにそのものみたいだよ コンストラクタの引数にConcurrentQueue<T>を渡せばブロッキングしてくれるっぽい
353 :
デフォルトの名無しさん :2010/10/16(土) 15:52:19
>>352 なるほど。。.NET 4の新規クラスってことは、2.0では作るしかないって事ですね。。
ありがとうございます。
.NET2.0がいいならMonoのソースコードがあるからそれ使えばいいと思う クラスライブラリはMITライセンスだったはず
355 :
デフォルトの名無しさん :2010/10/16(土) 16:14:48
>>354 ありがとうございます。ただデッドロックが起きる可能性がないことを
ソースレビュワーにたいして明らかな形で立証するのはちょっと難し
いと思っています。次のようなものを考えたのですが、問題があります。
行数が足りないのでとりあえず要素を取り出す側
public class BlockingQueue<T> {
private readonly List<T> list;
private readonly object LockObj = new object();
private int capacity = 0;
public BlockingQueue(int sz) {capacity = sz; this.list = new List<T>(sz);}
public T take(TimeSpan timelimit) {
bool queueWasFullFlag = false;
try {
Monitor.Enter(this.LockObj);
Monitor.Wait(this.LockObj, timelimit);
int sz = this.Length;
if ( sz == 0 ) {return null;
}else if ( sz == this.capacity ) {
queueWasFullFlag = true;
}
return this.list.remove(0);
}finally {
Monitor.Exit(this.LockObj);
if ( queueWasFullFlag ) Monitor.Pulse(this.LockObj);
}
}
356 :
デフォルトの名無しさん :2010/10/16(土) 16:21:36
上記の後要素を追記するメソッドを足して、要素数がcapacityに到達したら LockObjをモニタで待機・・・と考えました。 しかしtake側と追記(put)側で処理を待機する時に同じモニタを参照すると、 「キューがいっぱいだったから、put側スレッドを起こすためにLockObjに Pulseを送ろう」とした場合に、運が悪いとtake側がおきてしまう恐れがあ ります。(putが並行して走っているかもしれないし、takeが並行して走って いる可能性もある。両方並行もありうる) Monitor.Enterに渡すロックオブジェクトはput側、take側それぞれ別の オブジェクトにしないといけないと思うのですが、そうなると二つ以上の のダミーオブジェクトを二つ以上のスレッドが同時にロックするケースが 避けられず、いかなるタイミングでもデッドロックしないように実装し、 しかもそれを立証する(タイミングが絡むため試験での立証だけでは 不十分)のは、大変だとおもうんだけどなぁ。
>>347 >・キューが空の場合、キューにエントリが追加されるまで待機し、キューの先頭を返す。
待機させのにどうやって先頭を返すのかと小一時間矛盾を弄りたい
マジレスすると Producer Consumer でググってコピペ
そいで
>>356 については Guarded Suspensionパターンで条件判定
Javaでもやる定石パターン
358 :
デフォルトの名無しさん :2010/10/16(土) 16:33:01
>>355 追記
ソースだいぶ間違ってるみたいだけど要するに
【take側】
・LockObjを排他した状態で要素が空だったら待機。
・空でなければ先頭を返す。
・要素FULLであればput側をひとつだけ起こす。待機している
スレッドがない場合は何も起きないがそれでよい。
・でもtake側が起きる可能性はputが寝たままになるからゼロでないと困る
【put側】
・LockObjを排他し、要素FULLなら待機
・要素FULLでなければ末尾にエントリを追加して終了
・ロック獲得時点で要素数ゼロだった場合、take実行中の
スレッドがいればそれをひとつだけ起こしたいが、うっかり
takeを実行中の別スレッドが起きるのはやはりNG
359 :
デフォルトの名無しさん :2010/10/16(土) 16:40:16
>>357 takeとputは当然、別のスレッドによって実行されています。
・上記とは別に設定ファイルなどで上限を仕切られた多数のスレッド(ワーカースレッド)
があらかじめ起動しており、キューのtake()メソッドを実行する形で待機している
・画面イベントやソケットのacceptを行うメインスレッドが、処理要求発生時にキューに
要求情報をput
→put完了時に待機中だったワーカースレッドがひとつだけ起き上がり、処理を実行。
処理完了後再びキュー#take()メソッドを実行して処理待ちに入る。
・ただし要素をputする側のスレッドは、2本以上存在するケースもありうる。
そういうのは普通AutoResetEventとか使う 取得用/追加用のイベントをそれぞれ用意して、 取得用イベント ・追加時にSet ・取得時にWaitOne、要素がまだ残っているならまたSet 追加用イベント ・取得時にSet ・追加時にWaitOne、まだ空きがあるならまたSet
361 :
デフォルトの名無しさん :2010/10/16(土) 16:47:55
>>360 うおー!!これだ!!ありがとうございます!!!
>>358 基本実装
public class ProducerConsumerQueue<T> {
private readonly LinkedList<T> list;
private readonly int capacity;
private readonly object lockObj = new object();
public ProducerConsumerQueue(int size) {
list = new LinkedList<T>();
this.capacity = size;
}
public T Take() {
lock (lockObj) {
while (list.Count == 0) { // ガード条件
Monitor.Wait(lockObj); // 空の間は待機
}
var top = list.First.Value;
list.RemoveFirst();
Monitor.PulseAll(lockObj); // とりあえず全WaitThreadに通知
return top;
}
}
public void Put(T item) {
lock (lockObj) {
while (list.Count == capacity) { // ガード条件
Monitor.Wait(lockObj); // Fullの間は待機
}
list.AddLast(item); // ケツに追加
Monitor.PulseAll(lockObj);
}
}
}
>>360 そいえばC#にはそんな便利なのがあったorz
364 :
デフォルトの名無しさん :2010/10/16(土) 16:57:17
>>363 ありがとうございます!
なるほど。。
whileで条件判定をまわしてとりあえず全部起こせば実現できますね。
これ以上難しいのは怖くてできないので、これ使ってみます。
public void RunTest() { ProducerConsumerQueue<int> target = new ProducerConsumerQueue<int>(3); Thread putthrad = new Thread((_arg) => { for (int i = 0; i < 30 ;i++) { Console.WriteLine("{0}: Putting {0} at {1}", i, DateTime.Now ); target.Put(i); Console.WriteLine("{0}:Put {0} at {1}", i, DateTime.Now); } }); Thread takethread = new Thread((_arg) => { for (int i = 0; i < 30; i++) { Console.WriteLine("{0}: Take at {1}", i, DateTime.Now); var ret = target.Take(); Console.WriteLine("{0}: Taken {1} at {2}", i, ret, DateTime.Now); } }); putthrad.Start(); takethread.Start(); putthrad.Join(); takethread.Join(); }
MSの実装はMonitor使わずにSpinWaitとInterlockedだけでやってるみたいだな 自分で書ける気がしない
25分かかったorz
PulseAllでWait中のスレッドが全部動き出したら異常状態でガードWhile抜けるんじゃね? と思って調べたらPulseAllってWaitスレッドを待機状態から実行状態にするんじゃなくて、 実行可能状態にするだけで、その中の1つlock(){}の中で実行状態になるのね。 書いといてなんだけど勉強になったわ
現在、GoogleChromeのようなタイトルバーにタブを表示するフォームアプリケーションを製作中です。 XPまではGetWindowDCを使ってタイトルバーに独自にタブを描画して実現できているんですが、 Vista以降、エアロのガラス効果が有効な場合はタイトルバーへの描画が発生しなくなってしまいます。 エアロが有効なままタイトルバーに独自の描画をするにはどうすればいいでしょうか。
タイトルバー消してタイトルバー自作
371 :
デフォルトの名無しさん :2010/10/18(月) 20:32:02
ReactiveExtensions詳しいベテランの方教えてください。 1〜nの列挙をもとに Func<int, string>を非同期で実行し 最終的にstring[n]を得たい。 また、Func<int, string>は最大m個まで同時に実行したい。 以上よろしくお願い致します。
それ、RxじゃなくてParallel LINQなのでは。 LINQ の最初の方で AsParallel() 付けるだけ。
373 :
デフォルトの名無しさん :2010/10/18(月) 21:37:41
Rxはそういうことをやるためのライブラリじゃない。 イベントやスレッドなどの非同期的なものを整理して同期的に扱う仕組み。 非同期処理自体を行うわけじゃない。LINQでデータベース作りたいと言ってるようなもん。
RxにForkJoinなんてあるのか すごくMSらしくないネーミングだなw
377 :
デフォルトの名無しさん :2010/10/18(月) 22:43:41
普通に友達が勘違いしてるだけだろそれ。
どう見ても
>>371 は典型的なPLINQの例題。
379 :
デフォルトの名無しさん :2010/10/18(月) 23:28:35
>>378 勘違いとかではなく先ほども書いたように
別にベストプラクティスを求めているわけじゃないです。
少し違いますが、分かりやすく言えばクイズ(遊び)です。
仕事じゃないです。
クイズの答えを人に聞くなよ
答えは。。。お風呂!
382 :
デフォルトの名無しさん :2010/10/18(月) 23:37:24
kotaerarenainara resu surunayow
TPLとかPLINQとかRxとか似たようなもん乱発してどうするんだろう
似ているようで用途がどれも違うから大丈夫だ、問題ない
>>383 それ、用途で考えたらまるでかぶってないんだけど。
むしろ、
TPL 出て、過去のスレッドプールライブラリ邪魔よねとか
Rx 出て、過去の event の -= はないよなーとか
そういう突っ込みすべきだと思う。
以下を実行すると string s; s = "ab"; Console.WriteLine("{0,2}", s); Console.WriteLine("{0,4}", s); s = "あ"; Console.WriteLine("{0,2}", s); Console.WriteLine("{0,4}", s); >ab > ab > あ > あ となってしまいます。原因は予測できるのですが、これじゃ書式制御の意味がありません。 こういう物と割り切るべきでしょうか?それとも何か回避策があるのでしょうか?
>>386 何にこまってるの?
あなたの期待する動作がわからない
388 :
デフォルトの名無しさん :2010/10/19(火) 08:10:53
>>386 過去にもここかふらっとで同じような質問みたなあ・・・
winformとコンソールって若干差異がなかったっけ・・・?
時々出てくる、全角文字が半角文字の倍の幅にならない! ってやつじゃない?
何が言いたいかわからんかったがスペース潰れてたのな >ab >--ab >-あ >---あ で、何が問題?
マルチバイト星人なんですね
全角は半角2文字になってほしいんじゃない? ぼくの想像する、期待した結果↓ >ab >--ab >あ >--あ
>ab > ab > あ > あ 俺の環境だと問題なく出力されたぞ (vista vs2010 .net3.5 consoleアプリとwinformの出力ウィンドウ内ともに)
394 :
デフォルトの名無しさん :2010/10/19(火) 11:44:38
やっぱでじゃぶ・・・だな 前にこの手の話出た記憶が
どうも。なるほど問題が理解できない訳ですね。 了解しました。
何が問題か書いてないだろ
397 :
デフォルトの名無しさん :2010/10/19(火) 12:39:08
>>386 質問するのはいいけど使ってるIDEのバージョンやOSのバージョンも書かないと・・・
住所氏名電話番号も書いてくれないと…
全角半角病
>>395 説明もなしに君が取り組んでいる「問題」など分からんよ
提示された範囲ではフレームワークに「問題」は無いから、そちらの意味は除外
401 :
デフォルトの名無しさん :2010/10/19(火) 18:13:17
右揃えとなると計測しても難しいんじゃね コンソールってことは開始座標指定できないんだろ? AAエディタにそういった機能あるから不可能ってことは多分無いが
>>402 要はパディングでしょ。
最近はそんな処理ほとんどないけどPフォントが生まれる前の時代には当たり前だった処理
シフトJISに変換してバイト数数える程度でいいんじゃね。
さすがExcelが方眼紙になる国だなぁ。
Excelはキャンバスにもなるし…
>>402 厳密にやるならUnicodeで規定されている文字幅を考慮しないと駄目
SJISに変換できないかもしれないし、ambiguousなやつとかもあるし
あれは文字幅問題知らない欧米人用の資料だと思うけどな。 出回ってるフォントの現状追認だし日中韓で違いあるとambiguous扱いで逃げるし、 厳密とか言われると非常に違和感が。
えっと、真面目な話、一体なんの話しをしてるんだ?
字種に関係なく確実に右詰で文字を表示する方法じゃね
そういう絵的な調整は、キャラクターベースじゃなくてGUIでやればいいのに。
>>362 そういうのやるときはいちばん外側にもう一階層lock使って、
Waitするスレッドを一つにしてやるとパフォーマンスが向上したりするぜ。
まあ競合が少なければ逆に悪くなったりもするが。
>>412 どういうことだってばよ?
コードでおk
100文は1コードにしかず
>>403 そら緑文字が踊ってた時代は決め打ちでいいかも知らんが
今時フォントも選べないようなコンソールが存在しているのか?
>>413 412じゃないがシングルトンのダブルロッキングみたいなやり方じゃね?
http://homepage3.nifty.com/midori_no_bike/CS/index.html?userIO.268 ここのソースを基に、キーボードイベントから
public enum WheelDirection
{
UP = 120,
DOWN = -120,
}
public void Wheel(WheelDirection direction)
{
INPUT[] input = new INPUT[1];
input[0].mi.dwFlags = MOUSEEVENTF_WHEEL;
input[0].mi.mouseData = (int)direction;
SendInput(1, input, Marshal.SizeOf(input[0]));
}
こんな感じでホイール制御しようとしているのですが、サッパリ反応してくれません。
カーソル移動やクリックは問題なく動くので、パラメーターが間違っている気がしますが、どうにも行き詰ってしまいました。
どのようにすればよいのでしょうか。どうかご教授お願いします。
>>416 MSDNは MOUSEEVENTF_WHEEL 0x0800 と書いてあるが
リンク先のページには
const int MOUSEEVENTF_WHEEL = 0x0080 ;
と書いてあるようだが大丈夫か。
WinUser.hには #define MOUSEEVENTF_XDOWN 0x0080 /* x button down */ ・ #define MOUSEEVENTF_WHEEL 0x0800 /* wheel button rolled */ だな
419 :
デフォルトの名無しさん :2010/10/20(水) 20:21:46
あるログインページでログインが必要なサイトがあり ログイン後のみ開くことが出来るページ (ログイン後ページ) の取得をしようと思っています。 現在は、WebClient の UploadValues メソッドにて ログインページにユーザー名とパスワードをアップロード後 DownloadString メソッドでログイン後ページの HTML を取得しています。 IE ですとログインページを開かなくても クッキーに残っているのか直接ログイン後ページを開いても ログインせずに開くことができます。 IE と同様に直接ログイン後のページを DownloadString メソッドで 取得する方法はありませんでしょうか? 何故上記のようにしたいかというと WebClient の UploadValues メソッドが完了するのに 数秒かかってしまっているからです。 IE からログインするとすぐにログインが完了するのですが プログラムから実行すると何故か時間がかかってしまうのです。 これが改善できるのであればそもそも 上記のようなことはしなくても構わないと思っています。 説明が長くなってすいません。
クッキーで、というのが分かってるならクッキーつければいいぢゃない。
421 :
デフォルトの名無しさん :2010/10/20(水) 20:52:49
>>420 クッキー付きの DownloadString メソッドのようなものがあるのでしょうか?
それともクッキーを自前でファイル読み込みして
何かの引数で渡してやるとかあるのでしょうか?
>>421 WebClientとかにクッキー関連のプロパティなかったっけ?
いや、スタンピードっていうのかな? まあともかく、PulseAllで多くのスレッドを起こすのは非効率ってことだ。
>>417 ,418
無事動きました。
ありがとうございます。
>>419 System.Net.HttpWebRequest使えばcookie制御できるよ
あるネットゲーム(
http://www.ragnarokonline.jp/ )を起動していると、Visual C# 2010が起動しません。
起動してようとしても「不明なエラーです」とだけ出ます。
これは何故でしょう・・・・?
このネトゲはアンチマクロのための何だかよく知らないプログラムが作動してるらしいですが、そのせい?
知らんがな 開発ツールなんて一般的に見たらものすごく異常な動作をするものなんだから ネトゲの対策に誤検出されるようなことが起こってもおかしくないがそれはVC#側の問題ではない。 少なくともスレ違いであることは間違いない。
430 :
デフォルトの名無しさん :2010/10/20(水) 23:14:31
>>426 にある方法だといったんクッキーを取得しなければなりません。
取得しようとするとそこで時間がかかってしまうため
既にあるクッキーを利用したいと思っています。
クッキーを読む方法はないでしょうか・・・
そういえば前ニコ生のツール作ってる人がIEとかのクッキーを拾ってくるライブラリ作ってたな
InternetGetCookie
>>433 それだとVISTA以降のOSからは取得できなかった気がする
>>430 読めるんじゃないかな。
で、
>>426 をちょっといじってコンストラクターで渡すとかすれば。
>>432 これ覚えておいたほうがよさそうだな
>既にあるクッキー
ってのはIEのクッキーのことでいいの?
>>423-424 そういうことなら納得
.net なら
>>360 の言ったようにAutoResetEvent使う方がそこらの効率はよさげ
438 :
デフォルトの名無しさん :2010/10/21(木) 12:30:22
pictuerboxに表示された画像データをデスクトップにドラッグアンドドロップ で持ってくるにはどうすればよいでしょうか
pictureboxのDragDropイベントにハンドラ割り当てて、 ドロップ先のディレクトリにpicturebox.Imageを書き出すだけじゃない?
ドロップ先のディレクトリって結構難しいんじゃね
画像をテンポラリファイルに落として、そのファイルをDoDragDropじゃいかんのかね
Framework4以降ではタスク並列ライブラリの新しいモデルが提供あるっていうので Task使ってみたんですがDisposeがあって困り中。 別スレット走らせて後は知らないってやりたかったら、 今まで通りThreadやQueueUserWorkItemを使いなさいってことですか?
むしろBeginInvokeでやれってことでね?
445 :
438 :2010/10/21(木) 19:25:43
ListViewに表示したファイルをデスクトップに落とすにはどうすればよいでしょうか。 いろいろやってpictureboxからは厳しいというのが分かりました。
>>443 IDisposableイコール必ずDisposeを呼ばなければならない、ってわけでもないですよ、今や。
例えばReactive ExtensionsではDisposeは
イベントのデタッチや非同期のキャンセルに使われていて、呼ぶか呼ばないかは完全に任意。
Disposeでイベントをデタッチするのは今までにも普通にあった使い方だぞ イベントは登録解除しないとメモリリークする場合がある
>>446 ここではTaskの話だろ。
TaskはDispose必須だろ。
他の話しても何の意味もない。
まあ、必須と言っても致命的な問題になる系統じゃないだろうけど。
子TaskやContinueWithとか使うとDisposeするの面倒そうだねぇ
>>445 PictureBoxでもできるんじゃない?
試してないけど、
ドラッグ開始時など適当なタイミングで画像を一時ファイルに保存
ドラッグのデータをSetDataで一時ファイルのパスに変更
452 :
デフォルトの名無しさん :2010/10/22(金) 00:23:34
windows 7の32bitと64bitって intの最大値違う?
違わない
組込み型のサイズが環境依存なのは互換性を下げるだけの糞仕様。 そんな基本的なところで環境に依存したら何のための仮想実行環境かわからん。 ただしポインタやIntPtrのサイズは環境依存。
>>453 へー。違うと思った。
でも、intが2バイトの環境ってあったよなー
それは環境というよりコンパイラの仕様。 C#では言語仕様でint = System.Int32と決められているので intが32ビットではない実装はC#とは呼べない。
457 :
デフォルトの名無しさん :2010/10/22(金) 00:44:51
C言語では実装依存だろ 現在はintも32ビットが主流
C のあの仕様でみんな苦労してるからなぁ。 Java も C# も int のサイズ固定。
Cだと、char, short, int, long全部決まってない。
462 :
デフォルトの名無しさん :2010/10/22(金) 04:37:42
まあ歴史があるからなあ・・・ Cが出来た当時はまさかここまでプロセッサが成長して そこまで現役で使われるなんて思ってもいないだろうからな・・・
>>461 char は1バイトと決まってるだろ
1バイトが何ビットなのかは別として
組み込み型のサイズが実装依存というのは この言語で書かれたコードは処理系が変わると動きませんと言ってるのに等しいからな
∧_∧ / ̄ ̄ ̄ ̄ ̄ (ω・ )ゝ < あんだって? . ノ/ / \_____ ノ ̄ゝ
処理系が代われば普通は動かないが・・・
処理系っていうのは実行環境だけじゃなくてコンパイラも指す言葉なんだが‥・
コンパイラの実行環境か?
最初のCコンパイラのcharは9ビット長
なんだその余分な1ビットは
桁あふれ検出用?
奇数パリティかも
単に標準的なバイトのビット数が未確定だったコンピュータ黎明期の産物
9ビットってUNIVACか?
476 :
デフォルトの名無しさん :2010/10/23(土) 11:28:17
>>433 このAPI使ってオートログインの機能を実装してみようかと
自分のソースいじってみたんだがうまくいかない
別のサイトでテスト的にやってみたらそっちはうまくいった
何が違うんだろうとずっと悩んでたんだが
もしかするとSSLだとうまくいかないんですかね?
クッキー自体はちゃんとうまくとれてるんだけど。。
なかなか原因が思い当たらなくて。。
477 :
デフォルトの名無しさん :2010/10/23(土) 13:21:11
知らん まずは再現するコードを出しなさい
enable=true
480 :
デフォルトの名無しさん :2010/10/23(土) 13:25:47
そのテンプレ見た瞬間、vipかと思ったわw
当然確認しているはずのMCIエラーの内容は秘密か?
>>483 すみません
MCIエラーとはどのように確認できるのでしょうか?
調べてみたのですが知識が足らず、わかりませんでした。
485 :
477 :2010/10/23(土) 17:09:53
いろいろと試しているのですが、 インターバルの関数に入る前にopenをしておかないと再生されないようです。 ですがopenしたエイリアスで再生することはできず、 インターバルで呼び出された関数で再度openしてplayしなければ再生できません。 また、インターバルで再生を開始したエイリアスをストップすることはできません。 なにかわかりますでyそうか
じゃあきっと一連の操作は同じスレッドでやらないとだめなんだろ。 System.Timers.Timerのコールバックは別のスレッドで行われるから。 でもだからってWinFormsのタイマは使うなよ。精度が悪くてタイマにならん。
487 :
477 :2010/10/23(土) 17:17:57
すみません。連続投稿させていただきます。 先ほどから継続して調べていると、Timerは別スレッドで呼び出されるということなので、 インターバルで再生したオーディオがストップできないのではないかと思いました。 どうスレッドで動作するタイマはありませんでしょうか? フォームにボタンを二つつけて、再生/停止はできることは確認しております。
タイマーからbutton1.Invoke((EventHandler)button1_Click,null,null);って感じでInvokeメソッド使えばいいんじゃないか?
タイマーの話が出たようなので教えてください。タイマークラスがいっぱいあるのですが、 どう使い分ければよいのでしょうか。 1.System.Windows.Threading.DispatcherTimer →UIスレッドで実行されるタイマー。WPFで使用可 2.System.Windows.Forms.Timer →UIスレッドで実行されるタイマー。WinFormsで使用 3.System.Timers.Timer →スレッドプールで実行されるタイマー 4.System.Threading.Timer →スレッドプールで実行されるタイマー。3との違いがよくわからない
>>489 3は4を使いやすくしたもの
IntervalとかEnableとか用意したりイベント公開したり
ComponentだったりSynchronizingObjectプロパティ持たせたり
System.Timers.Timer 専用のワーカースレッドを作成し使用する。 System.Threading.Timer 標準のスレッドプールを使用する。
>>491 System.Timers.Timerは内部でSystem.Threading.Timer使ってるよ
ドキュメントではイベントはスレッドプール上で発生するぐらいしか書いてないけど
493 :
477 :2010/10/24(日) 14:03:40
>>486 すみません。タイミングが悪く書き込んだようですね。
ありがとうございます。
>>488 プラグインを作っているのですが、
フォームコントロールはプラグインの設定画面を出さないと出てこないため、
Invokeを使ってもフォームが表示されていないためクリックできないようです。
一定時間後にmciSendStringを実行させたいのですが、なにかいい方法はないでしょうか
495 :
477 :2010/10/24(日) 20:17:36
>>494 ありがとうございます!!
いただいたコードで問題なく動くことが確認できました。
それを加工するといろいろなことができそうです。
本当にありがとうございました!!
自分が動いている.NETフレームワークが2.0か3.5か判定する方法ってありますか? できれば3.5と3.5SP1の判定もしたいです。
ない。ランタイムバージョンは一緒だし。 レジストリを見て、SPが当たってるかは判断できるけどね。
WPFのDLLの有無/バージョンでも見てみればいいんじゃないの
C#初心者です。windowsフォームアプリケーションでプロジェクト作成して、 ウインドウサイズをプロパティウィンドウから特定のサイズに指定しただけのアプリなんだけど、 環境によっては実行したらウインドウサイズが指定のサイズと若干異なるのは何が原因なんでしょうか? ウインドウサイズだけでなく、配置したコントロールのサイズ・位置もプロパティウインドウで指定した 絶対サイズではなく、スクリーンの解像度に応じて(?)、伸縮がかかっている感じなんですが、 絶対座標での強制指定を有効/無効にするようなプロパティがあるのでしょうか? .net framework 3.5を使っています。
>>499 デザイナではFormの外形のサイズを指定していることになっているけど、
デザイナが自動生成する実際のコードではClientSizeに値が代入される。(確認してね)
これは、タイトルバーの高さとかウィンドウの枠の太さが環境によって違うため、
仮にどの環境でも同じSizeが適用される仕様だと、デザインによっては環境次第で
クライアント領域からはみ出してしまうコントロールが出てくる可能性があるためだろうと思う。
だったら、デザイン時の最初からClientSizeを指定するようにすりゃいいと思うんだが、
まあこのあたりがMS様の味って奴なんだろう
コントロールの座標は文字の幅・高さを基準にした座標系と昔から決まってるのよ。 this.AutoScaleDimensions=new System.Drawing.SizeF(6F, 12F); this.AutoScaleMode=System.Windows.Forms.AutoScaleMode.Font; このへん調べて。 初心者ならデザイナが作ったcsのInitializeComponent()見るのまじおすすめ。
あーそっちの話なのか。 AutoScaleModeもなんで最初からDPIになってないのかよく分からんよなあ。
>>499 VB6みたいに固定ダイアログ風にしたいのですか?
せっかく.NETを使うんだったら、Dockプロパティ駆使してウインドウサイズに応じて
画面内の部品サイズが適切に変わるようにするのがオススメですよ。
画面を作る工数が若干増えるのと慣れが必要ですが、ちょっとの工数増で見栄えや
使い勝手は段違いによくなります。
使い方によるだろ 固定ダイアログくらいVS2010でも出てくる
>>500-502 どうもありがとうございます。調べてみます。
>>503-504 私が想定していたのは、あるサイズの画像があって、そのサイズに
合わせて色々コントロールを配置していたので,自分の開発環境では
ぴったりだったのですが、異なる環境では画像だけ元サイズで、
他のコントロールのサイズと位置が変わって配置が崩れてしまいました。
コード内(Form_Loadなど)でサイズと位置を指定すれば、どの環境でも
絶対座標で統一されるようですね。
0または1の整数値の配列(要素数不定)に対する適切なハッシュ値の計算方法を教えてください。
507 :
506 :2010/10/28(木) 00:35:51
すみません補足です。 GetHashCodeの実装に使うだけなので、強度などは気にしません。 そこそこばらけて計算負荷がそれほど高くなければ十分です。
インデックスに素数で重みつけて加算しろ
32個ごとにintにしてXORとれば
uint h = 0; for (int i = 0; i < array.Length; ++i)
すまん、途中で書き込んじゃった。 この程度でいいんじゃない? uint h = 0; for (int i = 0; i < array.Length; ++i) h ^= (uint)(array[i] << (i & 0x1f));
513 :
506 :2010/10/28(木) 12:51:32
なるほど。シンプルでいいですね。
>>509 は自分でも考えたのですが、実質的にはほぼ同じですね。
C#でインターネット上から画像を自動収集するプログラムを作るにはどのような 技術を学べばいいでしょうか。
HTTP
516 :
デフォルトの名無しさん :2010/10/29(金) 17:13:20
C#だととりあえずはnet関連を扱うクラスで簡単にhtmlをダウンロードしてきて 中身を解析して画像のアドレスを抽出、それをさらにダウンロードとかすれば いいんじゃね? まあその他細かい漏れはおいおい組み込むとして
例えばクラスメンバのintなんかで有無を持たせるのにいい方法ありますか? intに入る値は全て有効にしたいので-1とか無効値は設定できません objectに入れると型を気にする必要が出てくるので出来れば 使いたくないのですが・・。
Nullableじゃだめ?
おお、どんぴしゃです! ありがとう!
だれか、VisualStudio2008Standardエディション、恵んでくれ。
Professionalエディションでもええよ。
>>517 解決したみたいだけど、こんなでもいいんじゃね?
public class IntCounter
{
public int value = 0;
public void inclement() {return this.value; }
}
クラスなのでNULLにできるし。
>>521 俺もほしいけど適法なのがいいなぁ。
はなし変わるけど個人でVisual Studioを買う場合(MSDN付きでバージョン管理ツール不要)
だと最低いくらくらいで買えますか?
自分で調べた限り最安値は15万前後。5万までならがんばるが15万は無理。。。。
int? a; ?が自信無さげでカワイイw
>>522 5万じゃアップグレード版も買えねーよ
MSDNエッセンシャルで我慢するか、開発者ライセンスで社用のを個人使用するしかないんじゃない?
そこでアカデミック版
学生じゃないから無理だorz
まえにNTT-X-Storeで買ったときはAcademicなのに学生証を提示させられなかったような…。 いや多分記憶違いかな…。
528 :
デフォルトの名無しさん :2010/10/30(土) 05:04:36
>>527 割といい加減
店頭で買う場合くらいじゃないの?
某店が倒産する前は個人でだけど法人窓口利用してたが
DSP版買うにしても余計なデバイス無しで買えたしなあ・・・
まあそういうことだ
マジで? ポチっていいのか? ホントにやるぞ?
>>528 無理じゃねえかorz
アカデミックパック商品は、
ご注文時に対象ユーザーであることを示す教育機関情報が必要です。
つきましてはご注文時に、学校名・教育機関名、種別(教職員/機関職員/学生)、
学部・学科、学年、学生証番号・教職員IDのご入力をお願いしておりますので
ご協力頂けます様、よろしくお願い申し上げます。
放送大学入れば?
55000円のVS2010 Proじゃダメなのかね。 MSDN付きがいい、っていう理由がよくわからんし。
わざわざライセンス違反で買う意味が分からん 違法ダウンロードと一緒だろうが
嫁が小学校の教師だから嫁に買わせてる。
∧_∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ( ´Д` ) < 通報しますた!! /, / \_______ (ぃ9 | / /、 / ∧_二つ / / / \ ((( ))) / ̄ ̄ ̄ ̄ ̄ ̄ ̄ / /~\ \ ( ´Д`) < しますた!!! / / > ) (ぃ9 ) \_______ / ノ / / / ∧つ / / . / ./ / \ (゚д゚) シマスタ!! / ./ ( ヽ、 / /⌒> ) ゚( )− ( _) \__つ (_) \_つ / > (・∀・)シマスタ!! .マスタ!! .スタ!!
乞食は分相応にExpress
乞食は分相応にEclipse に見えた
Eclipse馬鹿にすんな
Visual Studio 2008 EEでサービスアプリケーション作ろうと思ったら新規作成に 見当たらない。ヘルプ読んだらPro版じゃないと出来ないみたいだショボーン
.NET Frameworkとメモ帳があれば何でもできますよ
メモ帳だけ?金をもらってもやりたくねーよ
xkeymacs があればメモ帳だけでもいいかな、って思う
BuildToolがあればいい話でしょ? MSBuildってやつはどうなん?
>BuildToolがあればいい話でしょ? 全然違う
Expressでいいじゃんなんなの?
>>540 べつにEEでもサービス作れるよ
ってだけの話かと
549 :
540 :2010/10/31(日) 23:21:47
>>548 VS2010の間違いだったスマソ。以前2008Proで作ったデザイナのコードを貼り付けたら出来た。
スレッド処理クラスのインスタンスって、どこからも参照されなくなると スレッド実行中でもオブジェクトが破棄されるのね。ウンコ仕様。
イミフ(
new Thread(new ウンコ().メソッド).Start(); ってするとメソッド実行中にウンコのファイナライザが呼ばれる。
嘘付けソース晒せ
メソッドの戻り値がウンコのインスタンス握ってなければ破棄されて当たり前じゃね? 何か根本的に理解足りてなくね?
Thread にはメソッドの返り値のインスタンスを渡してるだけでウンコーヽ(`д´)ノを渡してるわけじゃないからなー
いやデリゲートだから渡してるだろ
ウンコはGCがたどれないから破棄されてもしょうがない
GCのルートと見做されるのは ・スタック ・静的フィールド ・明示的にルートとして作られたハンドル くらいだっけ
C#は万能だけど過信しすぎはよくないな
C#は万能だけどの時点で過信してないか?
実際Win上じゃ1番やりやすいと思うんだがな
限定されてる世界の中で万能
限定といってもクライアントPCの9割はカバーする。
Threadインスタンスはスレッド実行中は保持されている。 ThreadはThreadStartデリゲートを保持している。 したがってウンコは破棄されない。 んじゃなかったんだっけ?
おまえら本当にうんこの話が好きだな
うん
/{ / \_ {  ̄ \ _人 ,-、 ,-、 ヽ / }、 . イ/ 、、、 ・ ・ 、、、 ヽ /┘-く r‐- 、 __,. -、 _)ム、 ( , r) ヽ  ̄ ノ, -=ァ、Y 呼んだ? ー'-ー′ ` ー---― ' //7 lノ { i 弍、 ____ //7 ニl´ ヾヘヾ二フ ̄´ Y// ニ/ `ーニシ { { / `='
うん
こどもだなあ
うん
センサー式便器だとうんこ拭くのに腰を上げた時に流されるね
そうなの?
うんこの健康状態が確認できないな
特定のファイルだけコードの自動補正をさせたくないんですけど そういうことは出来ますか? enumのタブが消されて見にくくなります・・・。
できない
メンバをタブで綺麗に揃えたりするのはウザいだけ
どうでもいいじゃん スペース押すのダルいし、そのためのキーだよ
そうかなぁ、enumに数値指定する時とか 間違い見つけやすくなると思うんだけど・・。 とりあえず無いならあきらめます。
>enumに数値指定する時 ?
[Flags] enum Hoge { A = 0x00, B = 0x01, C = 0x02, } みたいなやつだろ
WPFみたいにListBoxにパネルを格納したりする事は可能? FlowLayoutPanelでやってみたらフォーカスが当たらない。 そりゃそうだが、フォーカスを受け付けるにはどうすれば?? そもそもFocus()とSelect()の違いって何?
>>583 内部的には両方ともコンテナのActiveControlにセットしてるだけだったはず。詳細は知らん。
確かにControlStyles.Selectableの説明に、 「true の場合、コントロールはフォーカスを受け取ることができます。 」 って書いてあるから混乱してたんだよね。
586 :
デフォルトの名無しさん :2010/11/03(水) 18:47:48
すみません、過去ログ検索したけど見つからなかったのでどなたか教えてください。 C#のListってランダムアクセスできるんですか? ListにはメソッドにBinarySearchが用意されているけど そもそもランダムアクセスできないのであればあまりパフォーマンスが 出ないように思うのですが。
587 :
デフォルトの名無しさん :2010/11/03(水) 18:49:21
>>586 インデックス指定すればアクセス可能だよ
ただ配列のように速度はでないだろうけど
List<T>はいわゆるリンクリストではなくて配列で実装されてるのでランダムアクセスは非常に速い。 BinarySearchもその内部の配列に対して直接行われるので速い。
List って名前見てリンクリストを想像するのは STL 脳かね。 非ジェネリック版は ArrayList だけど対応するジェネリック版が List<T> なのもあれだけど。
C#のListってArrayなListじゃなかったっけ?
.NETのIListインターフェイスはそもそも要素にランダムアクセスするためのインターフェイスなので わざわざArrayListという名前にする必要がないんだわ JavaのListインターフェイスはランダムアクセスに向いてない一般のリストに対応してるが そのせいで無駄に複雑になりすぎてる感じ
別にLinkedListクラスがある。
.NETのコレクション系インターフェイスもそれはそれで場当たり的且つ大雑把すぎる感じはする
そうか? この設計を超えるライブラリ集を未だ見た事がないのだが? 良い設計の物を教えてくれ 大抵の言語は使えるからすぐに評価出来ると思う
割り切ってて良いと思うけどな JavaのListはいろいろ詰め込みすぎて実装依存が激しい ランダムアクセスメソッドがあるくせに「実装次第では非効率だから使わないでね」とか書いてある
>>590 そうよ。
>>591 いや、ArrayList って名前の方がいまいちなのは同意で、
非ジェネリック版のコレクションに Obsolete 付けたいなぁという意味で。
>>593 他の言語と比べりゃかなり熟慮されてる。
とはいえ、1.0 の頃「失敗だった」って思ってるものも結構あって、
後からの追加分で方針変わってるものも。
597 :
586 :2010/11/03(水) 19:47:50
ありがとうございます。
>>588 ということは検索は速いけど挿入は遅いということですね。
挿入も検索も速度を気にするのならSoretedDictionaryという認識で正しいでしょうか?
SortedListの位置づけがいまいちよく分からないけどこちらはKey, Value形式の
Listということなんでしょうか。
Dictionary/SortedDictionary/SortedListは全部マップ。 List/LinkedListがリスト。
ソート速度要らないなら普通のDictionaryだろ。 HashSetだったかでもいいか。
>>597 Dictionaryがハッシュテーブル
SortedDictionaryが赤黒木
SortedListが普通の配列をソート済みにしておいて二分探索
とかだったような(確認はしてない)。
>>597 > ということは検索は速いけど挿入は遅いということですね。
データ数が少ないと挿入とかもリンクリストのほうが遅いとかってこともあるな。
602 :
586 :2010/11/03(水) 20:47:33
SortedDictionaryはMicrosoftのドキュメントには二分探索木で実際 には赤黒木ですよね。 SortedDictionaryであるKeyの値にヒットするものがないときに もっとも近いKeyに結びついたValueが欲しい場合はどうしたら よいのでしょうか。 List.BinarySearchではヒットするものがない場合は手前の インデックスの2の補数が返ってくるので上記が可能なのですが SortedDictionaryでList.BinarySearchと同じようなことはできる のでしょうか。 内部に木を持っていればできるはずなのに、パブリックメソッドを見る 限り内部の木を意識したメソッドがないように見えるのですが。
ないよ Dictionaryとの違いは、foreachで列挙したときにソートされてるかどうかだけ
604 :
586 :2010/11/03(水) 21:02:59
>>603 ありがとうございます。ちょっとショックですが。。。
あれは不便だよな おかげで赤黒木を自力で実装してしまったよ
拡張メソッド+LGCで無理矢理拡張することもできなくはないが……。 俺がやったらきっと内部状態の整合性をぶち壊す。
C#って以外にも文法ゴチャゴチャしてない? ポインタが使えるみたいだけど、C++で書けばいいだけの話じゃん
.NET の IL がポインター持ってるからねぇ。 C# も、制限付き(unsafe 内でのみ)ポインター使えるようにしてある。 まあ、実際、使うことほぼないけども。 結構ごちゃごちゃしてるけど、あれでも他と比べりゃだいぶマシ。
どうぞどうぞ
ゴチャゴチャはしてないと思うけど、匿名メソッドとかは(ラムダ式がある今だと)微妙だったりはあるね。 ポインタというかunsafeは別にあまり売りではないと思う……
611 :
607 :2010/11/03(水) 22:53:43
C#の文法は2日くらいしか勉強していないけど、 メモリ関係の処理を自動でやってくれるC++じゃん って思ってしまった
参照型が全部ポインタ宣言みたいなもんだしなー
DllImportでポインタ使うことはあるだろ たかが関数いくつか呼ぶためだけにC++使うなんてアホらしい
>611 でもジャグ配列はポインタのポインタじゃないんで凄く遅い
>>611 2.0のイテレーターとか、3.0の各機能、4.0のdynamic、(今後出て来る)5.0のasync、
C++とか話にならないレベル。
文法ゴチャゴチャとかいっても、継ぎ接ぎだらけのC++とは比べ物にならないと思うが。 そりゃ後発だからってだけだけど。
C++ 30年来の負の遺産だらけだから比べるとかわいそうってレベル。 C# も当然、どんどん後悔しょっていっちゃってるけども、 それでもカオス化のスピードは他の言語よりも緩やかだと思う。 (そもそも進化をあきらめた言語を除いて。 有益な追加と負の遺産の S/N 比の高さは随一。)
>>615 元々がJavaのシェアを乗っ取る目的で開発された言語だからな
しかしWIndowsメインってのが痛いな
MonoはMS公式じゃないし遅い
>>618 WIndowsなんてしょうもないミスタイプするような人が何言ってもねぇ?
ねぇ?っていわれてもねぇ・・・
>>619 Windows
どうだ!今度はちゃんとタイプしたぞ
言語宗教に興味なし 正直言語とかどうでもいいんだよ やりたいことがやれれば、作りたいものが作れれば、しかも楽に、ね
へじたん、かわいいよ、へじたん
MSが主導権握ってる限りは無理だろう 新たな中立団体作って分離させなきゃ
(゚Д゚ )ハァ?
>>526 世の中には放送大学っていう便利な大学があってな、
入学料22,000を収めるだけで学生になれるんだぜ。
(゚Д゚ )ハァ?
>>618 違うって。
「開発者から Java への機能追加の要望が山ほど届いてて、
MS 的にもまずデリゲート追加したいけど、
SUN が断固として拒否してきたから自社で作り直した言語」
が C#。
>>625 委員会方式でやってる C++ のカオス&足の遅さときたら酷いぞ、今。
強い組織によるリーダーシップは必要なんだよ。
>>625 よそのほうがよっぽど宗教じみてて、どうしようもないと思うが。
Java7なんか結局長い時間かけて何一つ決められず泥沼だからな
632 :
デフォルトの名無しさん :2010/11/04(木) 12:25:08
MSもさっさとIIS()のライセンス完全無償化にしてくればいいのに。 匿名接続のみのローカルDBのみは無償とかセコイことしーな。
MSが本気だしたらオーブンが崩壊しちゃうから加減してるんだよ!!
そりゃまぁザクが本気を出せば多少大きなオーブンでも破壊できるだろうが……
C++のポインタのように同じintのインスタンスを複数の 場所で変更可能にしたいのですが簡単な方法はありますか? クラスフィールドで二つのインスタンスのどっちが変えても 同じ値になるようにしたいです。
クラスにすりゃいいんじゃないか?
Nullableならもしかしてって思った俺は負け組
static?
>>635 クラスにしてstaticメンバ変数にする
初心者板がdat落ちしているのでここで質問します>< TextFieldTypeを使用してCSVを読み込んだのですが、、少ないデータ数だとうまくいくのですが、 100項目600,000行のデータを取得するとどうしてもEndOfDataのところでバッファオーバーになってしまいます。 これはもうこのクラスを使えないのでしょうか?それともなにか解決策があるのでしょうか? よろしくおねがいいたいします><
別に落ちてないし
644 :
デフォルトの名無しさん :2010/11/04(木) 20:55:48
>>641 >100項目600,000行のデータ
これのファイル上のサイズは?
試しに1項目10バイトx100項目x100万行(1GByteちょっと)を食わせてみたけど 特に問題なし
Formsアプリでの質問です。 ウィンドウのの×ボタン押したときでも Windowsごと終了されちゃったときでも 必ず終了処理するにはどこのイベントハンドラに 処理を書くのがよいのでしょうか。
647 :
デフォルトの名無しさん :2010/11/04(木) 23:12:47
FormClosingかな?
648 :
デフォルトの名無しさん :2010/11/04(木) 23:23:07
ガンダム―!
649 :
646 :2010/11/04(木) 23:25:24
ありがとうございます。 FormClosingで処理することにします。
非同期で複数のスレッドからアクセスされるデータって必ずLockしなきゃいけないの? 配列をforeachで列挙している時なんかはわかるんだけど、整数型に値を代入するようなときでも必要なの?
Lockしなくてもいいと思うならしなくておk
652 :
641 :2010/11/05(金) 09:16:14
昨日はdat落ちどころかインターネットすら繋がらなくなったorz 今確認したら「ふらっとC#〜」落ちてないですね;w; 100列X600,000行の桁の数字のカンマ区切りのCSVです。 サイズは280MBです。 デバックでは TextFieldParser parser = new TextFieldParser(FilePath, System.Text.Encoding.GetEncoding("Unicode")); 後に parser.TextFieldType = FieldType.Delimited;//区切り指定 parser.SetDelimiters(Delim(refDelim));//区切り文字指定 *Delim()は区切り文字を指定するメソッドです。 その後にwhile (!parser.EndOfData)のEndOfDataでInvalidOperationException例外が起きました・・・ ちなみにwhileの前にusing (StreamWriter w = new StreamWriter(presFolder + Path.GetFileName(FilePath))) を指定しているのですがこれも少しは関係しているのだろうか・・・orz
653 :
641 :2010/11/05(金) 09:33:35
追伸:StreamWriter等を除いた新規のプロジェクトで最小限の構成で試してもEndOfDataで例外が発生しますorz
654 :
641 :2010/11/05(金) 09:37:44
再三すいません。一応最小構成を挙げています。
もし
>>645 さん見られていたらコードのサンプル載せて頂けませんでしょうか?
よろしくお願いします。
private void button1_Click(object sender, EventArgs e)
{
TextFieldParser parser = new TextFieldParser("C:\\test.csv",
System.Text.Encoding.GetEncoding("Unicode"));
parser.SetDelimiters(",");
parser.TextFieldType = FieldType.Delimited;
using (parser)
{
while (!parser.EndOfData)
{
}
}
}
655 :
デフォルトの名無しさん :2010/11/05(金) 09:38:11
>>653 読み込みは行単位です。一度に読み込むとメモリ食うので。
一応、そちらのページを参考に作ったのですがうまく行きませんでした・・・
少ないデータならうまく行けたのですが大きいデータはEndOfDataでやはり例外を
投げてきますorz
657 :
デフォルトの名無しさん :2010/11/05(金) 09:43:58
>>656 どのくらいの行数ならいけるとか限界は調べてみた?
今細かく調べています。 現在は50x10,000まで完了しております。
659 :
デフォルトの名無しさん :2010/11/05(金) 09:50:51
>>658 じゃあ行はそのままで1行あたりのデータ量は増やしてみた?
えっと、まだそれは試しておりません。 テストデータを変えて実験してみます。
ああすまん
>100項目600,000行のデータ
これから絞込みしてるのか
でも
>>645 の報告もあるしなあ・・・
>>650 整数の代入も、コンパイル結果は数命令に分割されるからね。
読み書き両方やるならロック必須。
663 :
641 :2010/11/05(金) 10:18:59
解決しました!! なんというかお恥ずかしながら、EncodingがUnicodeではなくShift-JISでしたorz 半角カナを含むデータを考慮していたのでUnicodeにしていたのですが(序盤のテストデータは半角カナ含) その100X600,000のデータのみShift-JISとなっておりましたorz ソフト側で読み込みの際の文字コードを指定する項目をつけることでその問題を回避しようとおもいます。() スレの皆様ご迷惑おかけしましたm(_ _)m
Shift-JISも一応半角カナはいけるでしょ ちゃんと規定に入ってないのはアスキーコードくらいじゃないの? Shift-JISはアスキーコード互換で一応半角カナ対応してたと思ったんだけど
半角カナで作成したデータではShift-JISは文字化けしてしまいました・・・ なのでUnicodeを使用したのですが。とりあえず、Shift-JISとUnicodeのどちらか ユーザーに選べるようにしようかと・・・orz
>>662 やはりロックは必要なんですね。
ありがとうございました。
public x As string のようなVB形式の宣言は許されるのですか?
絶対許早苗
as は型チェック付きのキャスト
Asはキャストだったような
>>668-670 ですよね。
VBプログラマ移行のためにMSが糖衣構文を用意しているのか
と思っていました
どうもVB形式の宣言は、見にくくて馴染めないので、良かったです
そこについてはVBの方が好きだなあ 新しい変数が欲しいとき、変数の目的が先にあってその後で型を考えるのが自然だと思う var x as string のように書ければ、型推論でas stringを省略するかどうかの判断もしやすいはず。 型を先に書くとついついvar一色か全くvar使わないか極端になってしまいがちな気がする。
>>662 要らないよ。
ってか使い方によるともいえるけど必須ではないぜ。
型が後の方がコンパイラーや IDE には優しいし、 T Method<T>() みたいなジェネリックメソッドの戻り値にも優しく、 実は最近の言語だと型の方が後ろが主流だったり。 まあ、C/C++ からの移行っていう命題があった以上どうしようもないんだけど。
当時はスクリプト言語のイメージが悪かったから スクリプト言語に見えないように、っていうのは設計方針としてあったらしいね
質問:「.NET Framework 2.0のDLL(x86)」を「.NET Framework 4.0のEXE(x86)」から 遅延バインディングして利用すると、何か問題がありますでしょうか。 異なるFramework間の呼び出しで、問題が発生しないか確信が持てる情報がほしいです。 (当然、利用者は両方のFrameworkが動作する状態になっている事が前提でOKです) 現在、VS C# 2010 Expressで開発してます。 他人の作ったDLLを遅延バインディングして利用するプログラムを作っているのですが、 Reflectionの記述のために、ラッパークラスを書いてます。 メソッドやプロパティの読み書きごとにラッパーの記述が必要になってしまい、超めんどくさい状態です。(量が多い・・・) で。調べてたら、C#4.0のdynamicが使いたくてうずうずしてるところです(笑) ただ、DLLが2.0なので、現在はEXEのターゲットフレームワークを2.0にして開発してます。 DLLを4.0でビルドしなおして配布できればいいのですが、それはムリな状況です。 どこか、そのあたりの事を書かれたサイトなどがありましたら、教えていただけるとありがたいです。 よろしくお願いします。
一応100%の互換性があるはずだけど 全く問題なく動作する保証はないから必ずテストしろ という感じだったと思う
ソースコードが手元になくてリビルドできないから困ってるんだろ? そこはあんまり関係ないでしょ
>>680 うん、関係なかったです(笑)
書かれてる内容は、ビルドしなおしたときの話ですねぇ。しょぼーん。
サイドバイサイド実行ってキーワードになるのか・・・。
うお。 ■.NET Framework のバージョンが異なるアセンブリ間の呼び出し .NET Framework 2.0 で作成されたEXE より呼び出された.NET Framework 1.x で作成されたアセンブリは、アプリケーション構成ファイル(アプリ ケーション名.exe.config)で指定しなかった場合、CLR2.0 上で動作します。 アプリケーション構成ファイルはアプリケーションで1 つしか持てない ことと、CLR は1 つのプロセスに1 つしかロードできないため、最初に起 動するプロセスがロードするCLR のバージョンを決定します。 ---- つまり質問の例だと、2.0で動いてたDLLは4.0のEXEから呼び出すと、4.0上で動くということか。 これは想像してなかったなぁ。
とりあえず落ち着け。
>>688 すんまそん(;w;
探しても探しても、探し方が悪かったようで、ぜんぜん見つからなかったのに、
PDFで「サイドバイサイド実行」の言葉を知ってから、わんさか出てくる有様で・・・。
結論としては、
>>687 のアドレスが正解です。
.NET Framework のバージョンによって、このあたり大きく挙動が異なるようです。
まあ、互換としては大丈夫そう、ってことがわかりました。 でも、
>>677 さんの言うとおり、テストは必要ですね。
あと、先に書いた
「2.0で動いてたDLLは4.0のEXEから呼び出すと、4.0上で動く」
は、古い情報を元に憶測した内容で、間違っていました。
実際には、
「2.0で動いてたDLLは4.0のEXEから呼び出すと、Framework2.0で動こうとするがFramework2.0がない場合は動作するFrameworkを探す。
また、明示的にアプリケーション構成ファイルを使って、動作するFrameworkを指定することもできる。」
でした。
まあ、なんていうか、この対応表みると、世界中のクライアントは「4.0いれとけ」ってことですかね(笑)
とりあえず、自己解決しましたので、お付き合いありがとうございました。
>「2.0で動いてたDLLは4.0のEXEから呼び出すと、4.0上で動く」 であってるよ。 そうしないとStringのような基本的なオブジェクトのバージョン違いが混在してしまう。
>>672 intABCとかstrMOJIとか書く人はどうなるの?w
>>692 今更ハンガリアンは考えなくていいだろ。
型を前に書くのはCと文法をあわせたためで、新しい言語では後ろに書くものが多い。
Goとかそうだよね。
var aaa int;
func xxx(ar [] float) {
といった表記になる。
>>689 2.0で動いてたEXEはFramework2.0で動こうとするが、4.0しかインストールされていない場合は動作しない。
明示的にアプリケーション構成ファイルを使うことで、4.0で動作させることができる。
4.0のEXEから2.0のDLLを使う場合は何もしなくても4.0の上で動く。
>>687 のドキュメントはC++使ってCOMでCLRをホストするときの話なので的外れ。
.NETアプリケーションそのものには関係ない。サイドバイサイドもこの場合関係ない。
最も注意が必要なのはC++/CLIで書かれたDLL。CLRのバージョンが変わるとどうやっても絶対に動かない。
あう。あぶない。指摘ありがとうです。 今、見直した。 「マネージ COM コンポーネントの開発者」のところの表だったか(汗 夜中に眠たい目をこすりながら見るもんじゃないね; そうか、DLLといっても、そこを分けて考えないとダメなのね。
便乗して質問してもいいですか? @ITで.NET4.0新機能として複数CLRのロードとあったんですよ。 1プロセス内にCLR2と4をロードするらしいんですが、 具体的にどんな効果がありますか? 互換性問題の多くはクラスライブラリの変更だと思うので…
プラグイン機能を持ったC++のアプリケーションがあったとして そのプラグインが内部でCLRを読み込んで使ってたとして CLR2を使ってるプラグインとCLR4を使ってるプラグインを同時に読み込んでも問題がないということ。 .NETアプリケーションを作る上では全く関係ありません。
ありがとう、気にしない事にします
デスクトップシェルの拡張に使うCOMコンポーネント、 これに.NET製のCOMを使用できるようになった。
どのみち1.1は対象外
703 :
701 :2010/11/06(土) 16:11:09
もろに書いてあった。4.0以降で開発してくれと言う事か
ttp://msdn.microsoft.com/ja-jp/magazine/ee819091.aspx >1 プロセスに複数のランタイムを混在できるようになったことで、
>コンピューター上の任意のアプリケーションにより、インプロセスで
>実行されるものも含め、マネージ シェル拡張の作成を基本的に
>サポートできるようになりました。
>ただし、.NET Framework 4 よりも古いバージョンを使用して作成された
>シェル拡張は現在でもサポートされません。それらの古いバージョンの
>ランタイムが他のバージョンと併せてプロセス内に読み込まれることはなく、
>多くの場合エラーを誘因するためです。
シェル拡張ってなに? それ以外はOKなの?
Explorerの右クリックメニューでWindows Media Playerで開くとかそう言う独自項目作ったりとか 何にせよ非マネージドから呼ばれる時の問題
うは、VS2010Expressがコーディング中に落ちた;
2010だし仕方ない
>>706 気にするな、君のプログラムだってすぐ落ちるだろ。
2010って確かに2008より重いんだけど安定性悪いかなあ
特定環境だけ安定性悪くなるっぽい? 俺のとこも一時期不安定だったけど最近は何故か安定してる。
711 :
デフォルトの名無しさん :2010/11/06(土) 20:27:47
あるある なので左手は手動セーブを覚えてるw
左手は手動セーブを覚えてるうちはまだまだだよ
まさか・・・
>>712 はあの伝説の「真ん中の足セーブ」の使い手なのか・・・
ゴクリ…
正直安定性は2008よりはやや劣ると思う。 まあ2008でも落ちたりするけどな。
左手は添えるだけ
真ん中の足とかw 卑猥すぎるw
せめて「前しっぽ」と呼ぼうぜ
知恵袋にアダルトカテゴリなんてあったんだな ひどい質問ばかりだ
どう見ても業者です 本当にありがとうございました
こんなのみつけたのですが、これって本当? 煽りとかじゃなくて、.NETあまり使ってないからよくわからないんだ PowerShellも.NET使ってたよね 916 名前:デフォルトの名無しさん[sage] 投稿日:2010/11/06(土) 13:49:09 MSが.NETから徐々に撤退し始めたからどうなることやら
誰ともわからない俺が本当だ、と言ったら信じるのかい? 誰ともわからない俺が嘘だ、と言ったら信じるのかい? 誰ともわからない奴が撤退し始めた、と言ったら信じるのかい?
撤退してどこ行くんだよ 今.NET以外何も無いだろ
(Appleが許可しないから)iPhone向けのSilverlightは作らないんでHTML5使ってね。 という話を「MSがSilverlight撤退」と書いた売名記事が元になって 完全な誤報を鵜呑みにして、都合のいいように飛躍させたら.NET撤退になったのだろうか?
あまり使ってないからよくわからないならどうでもいいだろ気にすんな
SL4でプラットフォームとして十分に成熟したから、もう頻繁過ぎるアップデートは行わない 安心して開発して欲しいってメッセージを良くもまぁMSがSLから撤退と取れたもんだわな そしてお次は売名記事に踊らされたアンチの馬鹿がMSが.NETから撤退と煽り始めたわけか
729 :
デフォルトの名無しさん :2010/11/08(月) 07:10:56
実際MSが作ってるアプリで.netな物ってどれくらいあるの? VSで使ってるのは知ってるけど、いまどきのOfficeは.netなのかな
開発向けツールに多い パンピー向けが置き換わるのは3年後じゃね
ある規模以上のものでパンピー向けだとPaint.NETくらいしかしらない MSじゃないけど
最近こまごまと、ウェブのデモは Silverlight になってるけどもね。
.NET使った製品とか言ったら、仮にいくら良くても、自称情強がファビョり出すのをMSもわかってるんだろ
CLRをホスティングで使ってる製品は多くないかい。 基幹部分をネイティブで作って、プラグインや機能拡張部分に.NETを使っている。
Officeのようなパフォーマンス命のような製品まで置き換わるのは5年以上先だろう。
ネイティブでコンパイルできたら良いんだけどな。
ネイティブにするだけならngen。 いつもループしてるけど、GCを廃止するとか型システムや 基本ライブラリをぜんぜん別物に作り変えないと無理。
たまにJREをプライベート配置したバカでかいJavaアプリを見かけるよな アホかと思う
monoでlinux専用だが、これで全部バンドルされてランタイムなしで動くようになるが・・・ mkbundle --static hello.exe -o hello すっごく、大きいです。さらにパフォもよくない。
パフォーマンスをわざわざパフォとか略す人って コーディングでも変数名に意味不明な略語使っちゃうのかね。
粗探しに必至で笑えるね
C#の言語仕様をネイティブ向けに実装すること自体は全然難しくないよ そこそこ人気のある言語で誰でも考えることなのに未だにそういうのが出てこないってことは 結局メリットも需要も無いんだよね
>>743 難しくないというというソースをくれ。
難しくないならC#より先にjavaのネイティブ版がでてきそうなものだけど。
言語仕様書読めばいいじゃん。特に変わったところのない普通の言語だよ。 でもC#を実装したところで.NETアプリが動くわけじゃないからあんまり意味がなくて、 CLIを実装する方がずっとメリットがある。 Javaのネイティブコンパイラなら現にいくつかあるよ。
>>744 うん、お前には難しいね。
多分俺にも。
>Javaのネイティブコンパイラなら現にいくつかあるよ。 gcjかな?具体的に上げてよ。 そのレベルならmonoが既に実現済みだが、実用じゃないだろう。 あとBCLやGCや型システムも含めて言語仕様だと思うが、 それ無視して普通の言語といってるなら見当違い。
自己論破乙
規格のC#言語仕様にあるBCLやGCや型システムなんてそんなに大したもんじゃないよ 言語としての上っ面が書いてあるだけだ そりゃ言語仕様書実装したところで全く実用にはならんけど、それは最初からそう言ってる
C#の言語仕様書にはネイティブコンパイルしちゃダメとは一言も書いてないしな。 そんなの誰も欲しがらないけどさ
俺が欲しい はい論破
>>737 の「ネイティブでコンパイル」
の意味は.NET上のC#がそのままネイティブコンパイルできて、
さらに.NETのインストールも不要でスピードも軽量さもC並ということだろ。
>さらに.NETのインストールも不要でスピードも軽量さもC並ということだろ。 妄想が激しいね
>>751 あぁ、一言抜けてたわ。
作れるレベルに達している人が誰も欲しいと思っていない。
欲しいなら作れば?お前にはできないだろうけどwww
後付けなら何とでも言えるわな
>>755 あぁ、一言抜けてたわ。
これは後付けではない。
言い返せないからってショボイ煽りだな
途中まで会話に参加してたのだが誰が誰だかわからなくなってきた。 論破厨は話を混乱させるだけ道化だと思うから相手にしないほうがいいよ。
日本語でおk
>>754 これは笑った
まずお前の実力を示すことかけよ
>>760 これは笑った
まずお前の実力を示すことかけよ
>>758 最初から真面目に話すような内容なんてなかっただろ。
馬鹿なアンチを煽って遊んでればいい。
>>761 これは笑った
まずお前の実力を示すことかけよ
同一人物認定きてるね
手詰まりなんだろうなぁ。
これは笑った アンチはいつも自分に都合が悪くなると必死に話を逸らそうとするw
これは笑った ところで何の話だっけ
もう飽きたからどうでもいいな
みんな笑ってエンジョイプログラミングやな
・JavaやC#に似ている ・C/C++のように高速なネイティブコードを出力する ・C/C++とのバイナリ互換 ・ガベージコレクション ・デリゲート ・テンプレート これらの機能を備えるさいきょう言語といえば? そう!それがぼくらのD言語! C#おせー、M$糞だー、とかいっちゃうスーパーハカーのみなさんは 今すぐD言語へレッツゴー!
スーパーハカーならC/C++で事足りるんじゃ・・・
はかーが言語に縛られるとか笑い話にもならんな
>>776 C++/CLIはネイティブもガベージコレクションも両方出来るけど、同時にはできないだろ。
ガベージコレクションを求めてref classで書くとネイティブの速度が手に入らない。
言語なんてIDEの一部に過ぎません Dはそのへん勘違いしてるよ
で?IさんとEさんは?
馬鹿め、ヤツらは死んだわ
中央を占めるという意味ではDさんの影響力は偉大
A - Ada B - B C - C/C++ D - D E - Eiffel F - Fortran G - Groovy H - Haskell I - Intercal J - Java K - K L - Lisp M - ML N - NESL O - Objective-C P - Perl Q - Q R - Ruby S - Smalltalk T - Tcl U - Unicon V - VHDL W - Water X - XPL Y - Yorick Z - Z
B - Brainf*ck H - HQ9+
>>777 JavaVMやCLRがインタプリタだと思ってるのか?
ネイティブの実行速度が圧倒的に速いなんていうのは幻想。 GC使うならネイティブで書いても大して変わらん。 VMが遅いというのはインタプリタ時代にできたイメージ。
C++/CLIは#unmanagedとやらないと、 C互換の書き方をしてもILをはくよ。 GCは使わないけど、ネイティブとも言えない。
あんまりこのスレとは関係ないが、昔Perlの実行速度を見せられて 自分の中の何かが崩れ去った。
JITされるんで最適化されてないC++並の速度は出る。
初回のクラスロードとJITが遅いんだろ。特に画面系。起動が遅すぎ。 JIT完了した後はCと殆ど変わらないほど速いのは承知。
確かに画面系の起動速度はネイティブに劣る。まぁ、 関連アセンブリをNGenしとけばmscorjit.dll自体の読み込みをスキップする。 コールドスタートアップは.NET 3.5 SP1および.NET 4で随分改善した。 そもそもVista以降ではSuperFetchがあるため問題にならない。 後は時間の問題。
EvernoteのWin用クライアントアプリが.NET捨ててC++で一から作り直したけど 起動がだいぶ速くなったよね
あくまで起動なのか
世の中にはバグがあっても起動にこだわる人がいるんです
ユーザーに不利押し付けてることを忘れちゃいかん 傲慢になるな
Perl使ったことないけど結構早いもんなの? それともVB6よりも遅い?
スクリプト系の言語はある時期から急激に高速化したんだよね。 最近のは内部的にJITみたいなことやってるし。
>>799 Perlはバイトコードコンパイラ+VMなので、ただのインタプリタよりは速いが
動的型でJITまではやらないので、C#やJavaよりは遅い
しかし、もともとI/O律速な処理や、
Cで実装されているランタイムにほぼ丸投げできるような処理の場合は
言語の処理性能の遅さは問題にならない
そういう場合にはむしろC++やC#で適当に書いたコードより速いこともある
書くのが楽だし起動時間もC#やJavaより速いので、使いどころを弁えていれば便利
もちろん数値計算だとか、ピクセル単位でのグラフィックスの操作とか、
バイト単位でのバイト列の処理、みたいなものをPerlで手書きしたら
普通に遅い
この手の言語では(Cで書かれた)ランタイムと、その言語で記述されたコードの
性能差が大きいので、自前で何かやればやるほど遅くなる
最後に、VB6とPerlでは使いどころが違いすぎるので
その比較はあまり意味が無いな
サンクス へ〜しらなんだ 勉強になった VB6とPerlじゃなく せめてASPとPerlあたりで聞くべきだったかな?
>>802 CGIとしてPerlを使う場合の話です。
PerlのCGIは基本的にとても遅い。
理由はHTTPリクエストを受信する(=端末がWebページを要求する)度に巨大なインタープリタが起動するから。
プログラムを起動する処理は本質的に遅いので、CGIという実行形態自体が非常に遅い。
ただしApache+mod_perlのような環境ではPerlのインタープリタはメモリ上でApache本体とドッキングしている
のでそれなりに速いはず。
ASPやJ2EEはインタープリタをあらかじめ起動しておき、さらにWeb画面を生成するモジュール
もメインメモリ上に事前に展開する方式でHTTPリクエストを受信したタイミングで何かのプログラムやファイルが
読み込まれることは全くない。さらにJITの効果によって繰り返し実行されるコードがメモリ上で機械語化されて
いくので連続稼動時間が長くなればなるほど処理効率が改善する。
CGIがバッチファイルみたいな逐次起動型なのに対して、ASP・J2EEは常駐プロセスなので、頻繁に読み込む
設定ファイルやDB接続は、事前にOPEN(または大域変数にプリロード)しておくことができる。
例えば設定ファイルで挙動をカスタマイズできるCGIを組む場合、設定ファイルの読み込みはリクエストが来る
たびに原則として毎回実行する必要があるが、ASPやJ2EEではWebサーバー起動時に一度だけ設定ファイル
を読み込み、その内容を解析した結果をグローバルな変数に入れてやればよいので処理効率も非常によい。
ただし常駐プロセスはいらなくなったファイルやメモリや別のマシンへの接続やらを開放し忘れていると悲惨な
ことになるので、そこだけは要注意。
public GetXXX(string key){} 引数があるのにGetとメソッドの名前をつけるのは反則ですか?
なんで?
googleの採用する規則ではGetをつけること自体が反則
>>804 メソッド名が「Of」で終わるとか引数が添え字の役割を果たす場合はおかしくないんじゃね?
GetHostByName(String name)とか。
808 :
804 :2010/11/09(火) 20:35:38
807だけど例がぜんぜん前書きと違うこといってた。 調子に乗るもんじゃないな。全くw
C#にはデストラクタとファイナライザがあるそうですが、違いを教えてください そして、使い分け方も教えてください
違いはありません。同じものを指しています。 ~ClassName() { }のようなメソッドをC#では正式にはデストラクタと呼びます。 しかし、最近ではデストラクタではなくファイナライザと呼ばれることが多いようです。 理由としては、・Javaではそう呼ばれているから ・C++でいうデストラクタとは意味が違うから ・C++/CLIではそれぞれ別のものとして存在するから などが考えられます。
もしかしてデストラクタとディスポーズの話かな
ファイナライザなんか使わなくていいよ。忘れていい。 別に馬鹿にしてるわけじゃなくて、一般に使わないほうが良い。 どうしても必要な場合はあるけど、それが必要になるころには ファイナライザがどういうものかくらいは十分理解できてると思う。
814 :
810 :2010/11/09(火) 21:16:15
>>811 やっぱり、C++のデストラクタとは違うのね
>>813 /* 設定を保持するクラス */
static class Setting {
static Setting(){ /* 設定ファイルを読み込む */ }
static ~Setting(){ /* 設定ファイルを書き込む */ }
}
こんな事をやりたいんです
デストラクタでいろいろできるな〜って思ったからです
そういうもんじゃないから止めとけ。
>>814 そういうのにはDisposeとusingを使う
インスタンスがいつ消滅するかはFW側の管理下だから その実装はちょと危険だな
それ以上にファイナライザでは別の(マネージド)クラスをいじってはいけない。 Settingクラスのファイナライザが動くより早く、 設定ファイルを読み書きするためのStreamクラスが 既にGCされてしまっている可能性があるため。
819 :
810 :2010/11/09(火) 21:25:35
>>815 やっぱり、デストラクタ/ファイナライザはリソースを解放すためのものであって
楽するものじゃないよね
>>816 static classにusingなんて使えるのですか?
それに、disposeをすると何がおいしいんですか
>>817 それ俺も考えていた
Mainの最後に保存処理を入れればいいだろ
staticコンストラクタの話をしてたのか。 staticデストラクタなんてないよ。
仮にそんなものがあったとしても、プロセスが終わるタイミングで設定保存なんて C++でもありえない発想だと思うが
823 :
810 :2010/11/09(火) 21:41:43
>>821 そうなのか
>>822 普通はdeleteだけですね
お前等参考になったよ、ありがとうございます
コナミの。。。
その手のはWinFormならClosingイベントとかでやるもの 間違ってもGCにさせるものではない
>>794 そんなに起動遅いのが嫌ならメモリ32G積んで365日起動しっぱなしにしとけよウンカスが
Evernoteはフォントの表示が汚いのもC++乗換の理由だった みたいなこと書いてたけどそんなに違うの?
XP上でのWPFは確かに結構残念。
XP上のWPFはウンカスすぎる でも終わったOSにしがみ付いてウダウダ言ってる奴らはマジ馬鹿 お前らの存在がソフトウェアの売価を上げ質を落としている事に気づけ
>既にGCされてしまっている可能性があるため。 ないよ。
>>831 問題になるのはstaticでないSettingクラスが既にStreamを開いていた時にSettingごと
参照を失った時だけ。今回はあり得ない。
ちなみにSettingデストラクタの中で新たにStreamを開くと、既に参照がないから、
ファイル読み書き中にStreamのメモリがGCされる、、のかな?
833 :
832 :2010/11/10(水) 08:15:26
間違えた。Settingの保持しているstaticなStreamもGC対象だね。すまん。
>>831 それはファイナライザが実行される可能性があるという話。
ファイナライザがないマネージオブジェクトならいじっても問題ない。
なぜならファイナライザ完了までメンバはGCされないことは保証されているから。
まあ今回はFileStreamだろうからダメなんだけどね。
835 :
831 :2010/11/10(水) 08:59:35
>>832-834 俺間違ったこと書いてないよね?なんか自信なくなってきた
余談だがFormとかのDisposeがBoolの引数受け取るのは
呼び出しがデストラクタからかどうかを判断するためで
その場合はほかのオブジェクトにアクセスしないようになっていたような
Dispose - Finalizeだろ
ファイナライザでは何をすれば良いんだ?
クラス自身が保有する非マネージドリソースの解放。
大抵はファイナライザを直接使うよりSafeHandleを継承した方がいいけどな ファイナライザを直接使うとマーシャリング周りが面倒だ
>>835 >>834 が言ってる通り、ファイナライザが呼び出された時点で既に自身が参照してるオブジェクトが
GCに回収されていることはありえない。
ファイナライザが呼び出されている可能性があるというだけ。ファイナライザを持たないオブジェクトならアクセスしても実際には問題はない。
842 :
841 :2010/11/10(水) 16:42:15
補足 アクセス先のクラスがファイナライザを持っていないとしても、 そのオブジェクトがファイナライザを持った別のオブジェクトを利用している可能性がある。 だから、参照先のクラスの実装についての知識が無い限り、一般には ファイナライザ内で他のマネージオブジェクトにアクセスしてはいけない。
1.可能であれば、リソースの開放タイミングが重要なオブジェクト(IDisposableなど) はメンバー変数に保持しない。(Listの要素やDictionalyの中もダメ) 2.上記を満たせないクラスはIDisposableを実装し、Dispose()メソッド内で重要な リソースを開放する。またDispose()は絶対に例外をスローしないように実装する。 (エラー画面を出すことより問題となるリソースの開放を優先。どうしてもthrow したければ、その前にすべてのDisposableな変数をDispose()した後にthrowする) 3.Finalize()はDisposeし忘れの検知〜必要ならDispose()+Debug.WriteLine()程度 しかやらない。 【具体例】 class MyClass : IDisposable { private Stream anyStream1 = ・・・・; private Stream anyStream2 = ・・・・; private bool disposed = false; public void Dispose() { IDisposable[] ary = { this.anyStream1, this.anyStream2 }; foreach ( IDisposable target in ary ) { if ( ary[i] != null ) try { ary[i].Dispose(); } catch ( Exception ex ) { ・・・・ } this.disposed = true; } protected override void Finalize() { // Debug.Assert(this.disposed); // <- 厳しい人向け if ( ! this.disposed ) { this.Dispose(); Debug.WriteLine("MyClassのインスタンスがタイミングでDisposeされていません。"); } } }
具体例がDispose内で例外
>>844 すまん間違ってる。
foreachなのにary[i]じゃコンパイルできないな。
ary[i]はtargetの間違いです。閉じ中括弧も足りないが意味わかるでしょ。
C#ではFinalizeを明示的にオーバーライドすることは許されていないのでコンパイル通りません デストラクタとして定義する必要があります
847 :
853 :2010/11/10(水) 19:56:22
>>841 あ、GC回収とファイナライズを混同してた
説明ありがとうございます
レス番すら満足に書けない馬鹿がこの手の話題に噛み付くなっての
849 :
853 :2010/11/10(水) 20:42:28
ばかでわるかったな! もうこねーよヽ(`Д´)ノウワァァァン
未来人が来ていたのか
DateTime.ParseExact("04-26-10 06:32PM", "MM-dd-yy hh:mmtt", CultureInfo.CreateSpecificCulture("en-US"); これで日付の形式が間違っていますエラーが出るんだけど何故?
と の違い
853 :
853 :2010/11/11(木) 16:48:40
華麗に853をget!
854 :
851 :2010/11/11(木) 17:42:36
自己解決 実は変換元文字列の方、日付と時間の間にスペースが複数挟まってて DateTimeStyles.AllowInnerWhiteを付けたらおkになった ついでと言ってはなんだけど別の質問 Regexで\bがちゃんと機能してない(スペースそのものを置けばマッチするが\bだとマッチしない)んだけど俺んとこだけ?
855 :
デフォルトの名無しさん :2010/11/11(木) 18:09:11
System.IO.File.ReadAllLinesメソッドの挙動について 12345 1234_ 123_5 123__ こんなテキストデータ"data.txt"があったとする。 (_は空白) string[] line = System.IO.File.ReadAllLines("date.txt",); こんなかんじで読み込むと line[0]:12345 line[1]:1234_ line[2]:123\t5 line[3]:123\t という結果になります。 4文字目に空白はいると、それ以前の空白を含めたtab扱いになるんです。 文字コードはunicode、shift_jisにて確認。 これは回避しようが無いのかしら?
>>855 仕様です
んなわけあるかああああ
もっぺん隅から隅まで見直してみ
>>855 それ普通にテキストファイルの方でタブ使ってるだけだろw
C#で聞くようなことでもないんだけど・・・みなさんソフトのバージョンアップってどうしてますか? クライアントの設定を変えないように実装したいのですが将来のバージョンアップでレジストリ等の 設定が増減することが予想される場合に、例えば一度にVer1→4のようにするのか、それとも そのソフトのVerを調べてVer2→3→4のように適用していくのか・・・ 一度にVer1→4のほうがよさげですが・・・ 変な質問でごめんなさいorz みなさんのバージョン管理の方法が気になりまして・・・
うちのソフトのバージョンは年月日なんだ
861 :
859 :2010/11/11(木) 18:30:54
>>860 あっ、具体的に将来のバージョンアップにどのように対処しているか、
または現行のソフトのバージョンアップはどのように行っているのか
教えていただければ><
>>854 スペースで代用可能だと思ってるのなら\bの意味を間違えてる
たとえば入力が"i like banana"でパターンを"i\blike"にしてもマッチしない
"\bi\b"にすると最初のi一文字だけがマッチする
見た目が大幅に変わらなければver1のまま
864 :
855 :2010/11/11(木) 18:43:12
わかったああああああああああああ!
エディタが、保存するときに勝手にtab変換してた。死にたい。
>>857 ,858
ありがとう;;
>>861 一番初めにリリースしたやつはバージョン3
次にリリースするやつはバージョン3.1
その次は3.14
さらに次は3.141
これ結構有名だから覚えとくといいよ
>>864 恐ろしい罠だな、原因分かってよかったな
時代によっては、およそで片づけられるわけだな
そんなエディタあるのか?
869 :
851 :2010/11/11(木) 19:40:12
>>862 ・・・ん?
それはつまりlikeをマッチさせるのに\b使えないってこと?
likeをマッチさせるなら"\blike"とか"\blike\b"
>>862 のやつはあたまにiついてるぞ
871 :
723 :2010/11/11(木) 20:11:25
それ嘘記事だから
この人、あと一週間したらまたこの件を持ってきて勘違いでしたっていいそう…
>>803 > CGIとしてPerlを使う場合の話です。
いつの時代の話だよ
エディタにデータ書き出して見やすいように改行して、、、 ここにスペース入ってるのか カキカキ 入ってねーじゃねーか! カキカキ やっぱり入ってるじゃねーか! カキカキ エディタで改行したときインデントされてた罠 (´・ω・`)
879 :
851 :2010/11/11(木) 22:30:31
>>870 ??
"^i\blike\bbanana$"
これじゃマッチしないってこと?
するわけないじゃん
[先頭] [境界] i [境界] [空白] [境界] like [境界] [空白] [境界] banana [境界] [末尾]
>マイクロソフトが戦略変更。HTML5が唯一のクロスプラットフォーム と打ち出しつつ、IE9にはHTML5の独自仕様盛りだくさんです!ブラウザはIE使ってね(ハート とかだったら面白いのに
884 :
876 :2010/11/12(金) 00:18:57
誰も教えてくれないの?
>>876 意味がわからないのは、お前が馬鹿だから
つMSDN
887 :
876 :2010/11/12(金) 00:39:09
説明が書かれてないからわからない
888 :
876 :2010/11/12(金) 00:49:12
>>886 >コマンドを実行するかどうかに影響するような変更があった場合に発生します
MSDNにはこれしか説明がないです
変更ってなんですか?
ファイルを読み込むコマンドを作り
CanExecuteでファイルがあるかないかだけチェックしていれば
ファイルを削除した場合
event EventHandler CanExecuteChanged
が無くても普通にボタンが半透明になってクリックできないようになってるし
ファイルがある場合はちゃんと読み込める
889 :
851 :2010/11/12(金) 14:35:54
>>881-882 むむむ
[境界]は[空白]によって生じるんでないの?
\bの意味を取り違えてたことは理解したけど、今度は\bの使い道がわからなくなった
^とか$と同じだよ。 単語の先頭マッチとかさ。
891 :
851 :2010/11/12(金) 18:51:05
>>890 でも"\bi\b"は良くて"^i\b"はダメなのよな?
厳密には"\bi\b\s"でないといかんと
しかし\b使わないパターンだと"^i\s"でおkと
・・・やっぱり使い道なくね?
MSDNの通り、単語に一致させるために使う。文章だと使いどころは無いと思う >\b アンカーは、部分式を単語の先頭または末尾ではなく単語全体に一致させる目的で頻繁に使用されます。
893 :
855 :2010/11/12(金) 19:24:54
>>891 勘違いしてるような気がするのは俺だけか。
i like banana
だったら \bi\b も ^i\bも同じく先頭のiだけ
\bi\b\s は "i "やん。 厳密にはとか意味が分からん。
お前らがバナナ好きだってことはよくわかった 逆に¥bを使わずに、単語のみをマッチさせるパターンって難しいような
マッッッッッッッチでぇぇぇぇぇぇぇぇす!
そこは「どぇ〜す」で
キャリーどぇ〜す
質問質問! Q1. static void Swap<T>(ref T a, ref T b) { T tmp = a; a = b; b = a; } って標準クラスライブラリに無いの? Q2. 多次元配列(Jag配列でなくてint [ , ]とかの方)の最後の次元を1次元配列として扱う方法
>>899 Q1は俺の知る限りではない
Q2はArray.Copyとかしてやればいいんじゃね?
>>900 ありがとうございます。
Q1.は、やっぱり必要なクラスで毎回手書きがデフォですか
Q2.は、やっぱりコピーするしか手がありませんかね〜…
コピー無しで済ませたければJag配列使え、ということなんでしょうかね、、、
C#全く初心者ですが、Java等でのプログラミング経験はあります。 質問させて下さい。 二次元配列があり、そのうちの1次元だけを戻すような関数を作ろうとしています。 int[ , ] hoge = new int[ , ]{ { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } }; int answer[]; answer = hoge[0]; //←これでhogeの0行目だけ代入できるかと思ったら、エラー出てます ぐぐっても適切な解説が見つかりません。教えていただけないでしょうか?
ジャグ配列を使う。 -> int [3][] hoge;
C#の場合、2次元配列の子供の前の「new int[] 」が省略不可。 int[][] hoge = { new int[] {1, 2, 3}, new int[] {4, 5, 6}, new int[] {7, 8, 9} }; int answer = hoge[0]; // answerには{1, 2, 3}が入る。
こうじゃないか? int[] answer = hoge[0];
>>901 わざわざスワップなんて作る必要なくね?
毎回T tmp = a; a = b; b = a; を手書きするのがでふぉだと思う。
まあデリゲートで渡す必要があるなら仕方ないけどさ
>>905 いやいや、2次元配列とジゃグ配列を混同しちゃいかんぞ
int[ , ] hoge = new int[ , ]{ { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
は文法的にも正しい記述
ただhoge[0];って書き方ができないだけ
>>909 C#はC++と違って型ごとに特殊化したswapを作るメリットがないから。
void Swap<T>(this T a, T b) {
途中で送ってしまったorz こんな感じの拡張メソッド作ればわざわざSwapするコード書かなくてもx.Swap(y);みたいに書けて楽じゃん それはメリットなのでは?
>>912 refがないのでswapされないと思うよ。
そして拡張メソッドでrefは使えない。
>拡張メソッド なにこれこわい なんかヘルスバーグとかいう外人が 自分の書いたクラスが第三者によって危険なコードに変えられる危険性が いつまでもあり続けるのは我慢できないという内容の意味のことをまくし立ててた記憶があるが、 staticスコープ限定という言語仕様なのは現場のささやかな抵抗なのかね
LINQには拡張メソッド必須
>staticスコープ限定という言語仕様なのは現場のささやかな抵抗なのかね staticしか不可能だろうが…
拡張メソッド便利便利
自分の管理下にない型に拡張メソッドを追加しちゃだめです><
自分の管理下にある型ならわざわざ拡張メソッドじゃなくても追加できるようなきがする。 まあほかのクラスに非常に強く依存するメソッドならそっちの近くに書くために使うってのならあるのか。 あとインターフェースにメソッドを仕込む場合とか python大好きな自分はこんなメソッドを定義してる。 public static string format(this string s, params object[] args){ return string.Format(s, args); } もちろんプライベートでしか使わないけど
>>891 空白は1文字。
\bはアトミックゼロ幅アサーション。先頭や末尾と同じく存在だけ。
境界は _ 以外の記号でも生じるよ。
>単語文字は英数字とアンダースコアで構成され、単語以外の文字は、
>英数字でもアンダースコアでもない任意の文字で構成されます
>>916 >不可能
ぬんで?C#はJITだから例えビルドが済んだ別モジュールに属するクラスであっても
メンバの情報を全部保持しているから
(現にリフレクションを使えばprivateメンバも含めて全部列挙できる)
処理系がその気になれば、拡張メソッド的に当該クラスの本来の
privateなインスタンスメソッドと同格のアクセス権を付与できそうな希ガス、
>>921 そんな、できてもやっちゃダメなこと言われても。
後付けする部分が既存コード破壊できちゃまずい。
拡張メソッドでおかしくなるようなクラスは元からヤバいだろw
>>923 いや、今の C# の拡張メソッドの仕様ならね。
今の拡張メソッドみたいな書き方で private 変数にアクセス出来たらやばいでしょ。
>>921 確かにLGCやリフレクションを使えばできるよ。
JavaにしてもC#にしてもエセオブジェクト指向なんだから。
実はオブジェクト指向ってしっくりこないんです!
ぶっちゃけた話、「サンデープログラマを生み出す」本が良い本で、それを保持してる言語が「良い言語」なんですよ。 それで言うとC/C++/Java/HSP/VB/VBA/Perl /Rubyは「いい言語」です。 サンデープログラマが「それなりに」増えてる。これら以外は総じてダメなんです。
「良い言語」と「いい言語」の違いは?
HSPとか混じってんだけどw
>>921 そういう意味で不可能って言ってない。
ってかそんなの言い出したらなんでもありだろが。
そんな言語で大丈夫か?
一番良いのを頼む
FM-TownsBasic
神は言っている ーーここで、ラベルジャンプする運命ではないとーー
一番いい再帰を頼む
GoTo
スパゲティコードヲカクノデス
あいつは72通りの呼ばれ方をしている 俺にとっては初期化処理だが、君にとっては終了処理だ
Windows向けのフリーソフトなんてC#が一大勢力になってると思うんだけど。
フリーソフトはソースが航海されてるの?
ちょっとしたツールを作ってフリーソフトとして公開しようと 思い立って、ランタイムとか気にしないでどの環境でも動くように VC++で作ろうと思ったけど、久しぶりにMFCのソースをみたら GUIを作るのがめんどくさすぎて30分で断念。 しょうがないので.net2.0で作りはじめた。
ちょっと前まではフリーソフトでC#なんかほとんどいなかったのにな
簡単で起動も速いしVista以降なら.NET3以上がプリインストールされている。 WMIみたいなWindowsネイティブなサービスと連動する場合でもAPIなしで かなりの処理が書ける。.NET以前のVBと違って複数バージョンをインストール してもランタイムの構成ファイルが競合してぶっ壊れるとか、ランタイムのサー ビスパックを適用したらとたんにアプリが動かなくなったりみたいな現象もない。 まあ便利だよな。
C#大航海時代到来のお知らせ
最初の頃は、別に何かインストールしなければいけないのか? と当然のような質問されてたけど 今は今時.NETインストールしてないなんてって感じだし あの頃あんなに嫌がってたじゃないか 今でも、.NET性は品質が悪いとか言う奴もたまにいる
当時仕事ではVBでプログラム作っていたが、自分の家のPCにVB6のフリーウ エア(それにランタイムも)をインストールするのは絶対に嫌だったな。 良さそうなフリーウエアを見つけても「動作にはVBランタイムが必要」と書かれ ていたら、「うわっ、これ入れると調子が悪くなるやつだ!あぶねー」とか言って インストールしなかった。
ActiveX/COMのバージョン違いでのトラブルが多かったからね。
Vistaや7には、VB4以降のランタイム入っているけどね。
俺は2006年までVB6の新規開発案件に携わっていた(今はC#かC++)けど、 今でもVB6の新規開発なんてあるのかね。
954 :
953 :2010/11/14(日) 07:52:26
自己解決しますた
955 :
デフォルトの名無しさん :2010/11/14(日) 09:35:02
今から新ソフト作るなら第一選択はClient Profileだからな
>>952 うちはVB6で止まってるやつがいるからVB6現役だよ。
.NETでてから何年たったと思ってるんだ・・・少しは新しいこと勉強しろと。
.NETでも納品でVS2010買うのに開発はVS2005だ・・・LINQつかいてぇ。
てかC#で開発してぇ・・・VB.NETはいやだ。
仕事なら別になんでもいいんじゃね。COBOLだけは全力で回避するが
VB6のランタイムなら入ってる。
VB6JP.DLLがなかったり微妙だったりしない?
949だが俺がVBでプログラム作ってたのは、確か2004年頃までだった。 その後J2EEが出てきて、うちのSE軍団は「J2EEの事を新しい業務系言 語なんだからVBよりもっと簡単に違いない」と勝手に決めつけ、VBしか 書けないペーだった俺はその後さんざんな目に遭ったんだ。 まああのままVBしか書けないヤツだったら今頃ドロップアウトしていたか もしれないし、今では俺の周りで進行するプロジェクトで分からないことが あると、誰もが俺に質問するようになったけどね。
962 :
デフォルトの名無しさん :2010/11/14(日) 13:02:24
VBって何のために存在するの? 情報の分散?
過去の呪縛。
>>962 VBしか書けないヤツの中には、「バリアント型」の意味すら分かっておらず、
他人の猿まねで人が書いたことのあるコードと似たコードを書けるだけの
連中が大勢いるんだ。そいつらはプログラミング言語の知識が非常に乏し
いのに、それでもプログラムを書いてメシを食っている。
そんな連中にC#やオブジェクト指向は難しすぎるんだろ?
早い話がC#を使える平均的なPGと、昔も今もVBしか書けないPGでは、
基本的な素養というか、技術スキルに大きな隔たりがあるんだ。
ある意味VBしか書けない阿呆の面倒をまじめに見ようとするMicrosoftは
偉いと思うね。
Variantの意味は分かるけど挙動は理解しがたい
おっさんぽいのに新人みたいなこと言ってるなw
しかし、動的型の言語が隆盛の今現在、Variantの価値もみなおされていいのではないだろうか。
またこのネタか....
>>968 なんか釣りじゃなくて真面目に言ってるっぽいな君はw
.net以前のVBでも使えていたダックタイピング。 すごく便利。 最近はC#でも取り入れたらしいけど、10年くらい遅れているんじゃないのかね。
C#「ぐぬぬ」
10年くらい遅れているんじゃないのかもね。
アヒルがキーボード打ってるのかと
VB.NETで問題なのはオブジェクトうんぬんでなくコードの可読性
いまだにVB6厨っているんだね。 うちの会社ではVBしかできないのは恥ずべきこと っていうか、それじゃ食えないんだが。
>>968 動的言語がいいとされるのはメタプログラミングの能力。
それを支えてるのは動的コード生成であって、動的型じゃない。
型が緩いのはむしろマイナス。
あと、クラス間の依存性切るのに非継承型の型システム(インターフェイスに頼らない)が有効なのも確かだけど、
それ実現するにも動的な型である必要ない。
C++ の template なんかがそうだけど、ダックタイピングでも静的な型チェックちゃんと入れれる。
>>976 メタプログラミングrubyとかリファクタリングrubyエディションを読んだら
動的型がマンセーされてる。
マイナスって言うか、プラスって考えてる人のほうが多いんじゃないだろうか。
>>974 それはたぶん君がVB書いたことないだけ。
どっちも一長一短あるでしょ。
C#の方が一方的に読みやすいってことはない。
>>969 >>675 こういう人格攻撃に終始してる人は、本題の動的型の件に関しては
「その通りでございます、反論の余地はございません」って認めてるわけだよね。
よしよし。
Variantは入力データによって挙動が変わりすぎるからテストで バグを出し切ろうとするとかえって面倒なんだよな。 まあ、正常系が動けば多少のバグが許されるようなプログラム を、飯を食えるレベルのスキルがないプログラマでも書けるよう にするには、Variantも良い選択肢かもね。 おれはプログラムでメシを食っている関係で動的型は嫌いだけど。
VB.NETなんて作るから、アップグレードウィザードで変換したモジュールをいつまでも使わないといけない。 C#のみにしてVB6脳のやつら捨てて欲しかったわ。
>>979 人格攻撃ってか。
一応つっこんどくけど、旧VBで実行時バインドする場合、普通はVariantじゃなくて
Object型を使うんだよ。
もちろんVariantでも同じことは出来たはずだと思ったけど。
VBは動的型の良いところを生かしてるというより ダメな子を甘やかしてるだけだからなあ RubyやPythonとは性質が違うと思う
Ruby、Pythonと同じようにダックタイピングができて、ネイティブコードをはくのがVB
986 :
974 :2010/11/14(日) 15:04:29
>>978 VB6からのユーザーで
VB.NETもC#も使ってますよ
おいおい、VBすら扱えないオレはどうすればいいんだ。 C#とJavaとRubyとPerlぐらいしかできないぜ?
>>985 でもVB6ってシングルスレッドのWindowsアプリしかかけないじゃん。
デュアルコアマシンで作っても重い処理を実行している間は
画面が固まって応答なし。
あとVBはいい加減機能が古いんだよな。
・APIかActiveXを使わない限り、TCP/IP通信ができない。
・マルチスレッド非対応
・WebアプリもコンソールアプリもWindowsサービスも作れない
(C#は全部できるぞ)
・ウインドウをリサイズしてもウインドウ内のコンポーネントの
配置とサイズが変化しない
(.NETコンポーネントのDockプロパティがない)
・64bitコードを吐くコンパイラがないので、64bitのDLLに依存
したプログラムは書けない。たとえば64bit版OracleClient
と連携不可。64bit版IEやOfficeともたぶん連携できない。
いい加減こんな時代遅れの言語は廃止しないといけないんだよ。
それを言語の制約のせいにできるのがメリットだったんだよ .NETになってからは言い訳できなくなったけどね
>>988 10年前のものと比べても仕方がないが、
TCP/IP通信やDockは言語の機能ではない。(VBのIDE用にDock類似の機能を実装できる)
WebアプリでVBでプログラミングはかつては普通。
MSもサポートを続けているのはランタイムだけで言語自体はサポートしてない。
>>987 世の中には知らないほうが幸せなこともある。
すっかり愚痴スレになったな
>>977 継承とか仮想関数テーブルによる動的実行は確かに弊害多くて、
動的型をマンセーしたい気持ちはわかるけど、デメリットがでかすぎる。
C# の dynamic に、C++ 0x(に入り損ねた)Concept みたいなダックタイピング向けの型チェックの仕組みが入ったら最強なんだけどもなぁ。
994 :
デフォルトの名無しさん :2010/11/14(日) 17:27:26
データベースソフトを作ろうと思っています。SQLite等を使うと 別途データベースのインストールが必要なので、いつもアクセス型のDB やXMLを使っています。 解凍しただけで実行できるようにしているのですが、皆さんはどのよう な形のデータベースを使っていますか。
「解凍しただけで」の類は置き場に困るんでかえって嫌なのよね。 楽したい時は SQL Server Compact(SQLite 同様、in-process DB)使って、インストーラーに同梱。 あとは普通に SQL Server。容量制限厳しいけど無料版(Express)もあるし。
>>994 SQLiteは解答しただけで実行できる、まさに目的のものだと思うんですが。
MySQLとかと勘違いしてない?
>>994 DBファイルのコピーのことを「インストール」と言ってるなら、
プログラムでファイルの存在チェックをして無ければCREATE文を発行するようにすればいい。
998 :
デフォルトの名無しさん :2010/11/14(日) 18:29:14
tugi sure mada?
初心者チックな質問なんですが、VS2008でC#プロジェクト(Windowsアプリ)を作成した後、 プロジェクトのプロパティからアセンブリ情報を開くと、ファイルバージョンに1.0.0.0と規定で 入力されていて、自動インクリメントに出来ません。 setup.exeを使って更新インストールをさせたときにファイルバージョンが同じだと上書き 去らないようなので、バージョンの設定をAssemblyinfo.csから削除して、アセンブリバージ ョンを自動インクリメントするように指定しています。 とりあえずこの設定で問題は無いようなのですが、ファイルバージョンを明示しない事に よるデメリットがなにかあるでしょうか? ファイルバージョンがわざわざ自動インクリメントされないようになっていることには何か 理由があるのではないかと思うのですが、何も思い当たりません。
次の質問をどうぞ
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。