09/11/11 21:54:23
>>867
計算がメインなら計算用のスレッドを自分で起動する
間違ってもイベントハンドラの中でやらないように
874:デフォルトの名無しさん
09/11/11 22:29:34
設定ファイルで、アプリケーションスコープで普通に読み書きできませんか?
やりたいのは、ユーザーフォルダではなく.exe直下に設定ファイルを置く事です。
875:デフォルトの名無しさん
09/11/11 23:17:56
複数ユーザが同時にログオンして起動してたりしたらまずいだろ
だから読み取り専用になってるんだろ
876:デフォルトの名無しさん
09/11/12 00:15:16
ん?
877:デフォルトの名無しさん
09/11/12 00:29:30
>>874
別に制限が多い「アプリケーション設定」なんか使わず、
自分で設定値の保存/取得をするコードを書けばいいだけ。
シリアル化を使えば手間は「アプリケーション設定」と大差ない。
(むしろこっちの方が手間が少ない場合の方が多い。)
ただ、そうしたところで
- プログラムがProgramFiles以下のディレクトリにインストールされている場合、
Vistaでは実行ファイルと同じ場所に設定ファイルの作成はできない。
- Vistaでなくても、デフォの設定では通常ユーザーで実行した場合は
設定ファイルを作成できない。
ってだけのこと。
878:デフォルトの名無しさん
09/11/12 15:22:18
アプリケーションスコープの設定はAll Usersに保存されるんだっけ
879:デフォルトの名無しさん
09/11/12 16:39:38
されないよ。
そもそも変更不可だ。
880:デフォルトの名無しさん
09/11/12 20:28:48
VBはビジュアルベーシック
.NETは何の略?
881:デフォルトの名無しさん
09/11/12 21:33:06
あえていうならMicrosoft.NETの略
882:デフォルトの名無しさん
09/11/12 23:22:16
Visual Studio 2008 Express Editionでプログラムを作成しています。
開発しているPCではエラーも発生せず動作するのですが
あまりメモリを積んでいないPC(512MB)ではSystem.OutOfMemoryExceptionが発生します。
エラーが発生する環境を開発環境で再現するためにApplication Verifierを導入し,
Low Resource Simulationにチェックを入れて実行するとSystem.OutOfMemoryExceptionが発生しました。
メモリが足りないことがエラーの原因だと思いますが,FormにPictureBoxを数個置いているだけのプログラムでして
それほどメモリを使用しているとも思えません。CloseやDisposeで解放するようにしましたが状況は変わりません。
こうした問題はどうやって解決すべきでしょうか?
883:デフォルトの名無しさん
09/11/12 23:38:10
>>882
そんなの知るかよ。
それほどメモリを使用しているとも思えません?
煽り抜きでいかにもダメな奴が言いそうな台詞だね可哀想。
884:882
09/11/13 00:07:33
メモリの使用状況についてですが以下のような感じです。
Working Set - 20,684KB
Peak Working Set 20,800KB
仮想メモリ
Private Bytes - 18,912KB
Peak Private Bytes - 19,088KB
正直メモリ使用量の定義がよく分からないのでそれっぽい値を書き出しただけなんですが
コントロールの無いFormを表示させるだけのプログラムで以下のような感じなので
それほどメモリを消費してるとは思えないのです。
Working Set - 13,228KB
Peak Working Set 13,228KB
仮想メモリ
Private Bytes - 14,052KB
Peak Private Bytes - 14,052KB
885:デフォルトの名無しさん
09/11/13 00:50:37
メモリ増やせばいいじゃん
886:デフォルトの名無しさん
09/11/13 01:05:57
分からないなら分からないって言えよ
887:デフォルトの名無しさん
09/11/13 04:07:16
VB2010ベータ1をインスコして勉強がてら遊んでみた。
最近はマルチコアのCPUも多くなったし、重いループ処理は極力マルチコアで処理させようと考えて
次のようなコードで試してみたんだけど・・・
Private counter As Integer
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
counter = 0
System.Threading.Parallel.For(0, 10000, AddressOf proc)
Console.WriteLine(counter)
End Sub
Private Sub proc(ByVal index As Integer)
counter += 1
For i As Integer = 0 To 1000000
Next
End Sub
counterの値が10000になると思ったのに何故か9998とかになっちまうじゃねえか!この野郎!
あと、System.Threading.Parallel.ForEachも試してみたが、これも同じ様に列挙が抜け落ちる!
言うまでもなく例外など出ない(笑)
俺がおかしいのか??それともベータだから未完成ってことなのか?
888:デフォルトの名無しさん
09/11/13 05:32:11
>>887
そもそも += はスレッドセーフじゃなかったと思う
889:デフォルトの名無しさん
09/11/13 05:39:45
>counter += 1
Interlocked.Increment(counter)
VBってvolatileにあたるのってなかったっけ?
890:デフォルトの名無しさん
09/11/13 09:37:39
スレッドセーフってなんだよ!意味わからない専門用語つかうな!バーカ
891:デフォルトの名無しさん
09/11/13 09:38:28
>>887
当たり前であって馬鹿はお前だ。
どういう事か理解できないならパラレルとかマルチスレッド絡みには
手を出さない方がいいぜ。
892:デフォルトの名無しさん
09/11/13 10:15:42
>>890
MSDNのクラスのリファレンスに必ず「スレッドセーフ」があるんだが。
それでいて”意味がわからない専門用語”といってる時点で、あんたがココに来る資格ないよ
893:デフォルトの名無しさん
09/11/13 13:19:11
質問しといて分からない単語が出てきたら調べる努力もせずに逆ギレって・・・