[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2004/09/08(Wed) 18:06
投稿者名:DOON
Eメール:
URL :
タイトル:
変数の最大
はじめまして。
VBプログラム三年目のDOONです。

今一つの構造体が20Mの変数を作成すると
怒られました。
20Mのデータが4つ入ったファイルを開けて、
ひとつのデータを変数に読み込もうとしています。
64KB以上は作れないみたいなことをいわれたのですが。
それ以上は本当に作れないのでしょうか?

現在80Mのファイルをファイルマッピングしようか悩んでます。
マッピングした場合ならばVBから読み込むのは可能なのでしょうか

よろしくお願いします。

投稿時間:2004/09/09(Thu) 00:25
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re: 変数の最大
> 64KB以上は作れないみたいなことをいわれたのですが。
構造体というか、「ユーザー定義型」の上限ですね。

ただし、
  Private Type X
    A(60000) As Byte
  End Type
  Private N(1000) As X
などとしたり、
  Dim X(21000000) As Byte
  Dim S As String
  S = String(21000000, 0)
のようにして、巨大なデータを取り扱う事自体は可能です。

どうしてもユーザー定義型として処理したいのであれば、
一つの巨大な型にするのではなく、適度に分けてみてください。
状況によっては、そのユーザー定義型をクラスとして昇華させてしまうのも良いかも。


> それ以上は本当に作れないのでしょうか?
本当かどうかは、Microsoftに問い合わせいただくことになるかと思いますが、
とりあえずは、MSDNライブラリの下記の項目を参照してみてください。
VBの制限事項について書かれています。

[Visual Studio 6.0 ドキュメント]
└[Visual Basic ドキュメント]
 └[Visual Basic の使用方法]
  └[プログラミング ガイド]
   └[Visual Basic の仕様、制限事項、およびファイル形式]
    └[プロジェクトの制限]
     └[データの制限]

> 現在80Mのファイルをファイルマッピングしようか悩んでます。
ファイルマッピングというと、CreateFileMapping/OpenFileMapping 系のAPIの事でしょうか?

投稿時間:2004/09/09(Thu) 09:50
投稿者名:DOON
Eメール:
URL :
タイトル:
Re^2: 変数の最大
DOONです。本当に丁寧な返事ありがとうございます。
ヘルプの場所まで教えていただけるとは。
ヘルプ読みましたが、やっぱりMSDNはわかりにくいですね。

> ただし、
>   Private Type X
>     A(60000) As Byte
>   End Type
>   Private N(1000) As X

↑↑↑↑↑↑↑↑↑↑↑
上記のやり方は64KBぐらいの構造体を宣言して
それを配列にするのならば、大きくするのは可能ということですよね。


>   Dim X(21000000) As Byte
>   Dim S As String
>   S = String(21000000, 0)
↑↑↑↑↑↑↑↑↑↑↑
これは変数だけならサイズは自由ということですよね。
これならC見たいに変数を指すポインタみたいな形だけが
あればなんとかなりそうな気もするのですが。
VBでは無理なのでしょうね。

>
> どうしてもユーザー定義型として処理したいのであれば、
> 一つの巨大な型にするのではなく、適度に分けてみてください。
> 状況によっては、そのユーザー定義型をクラスとして昇華させてしまうのも良いかも。
クラスは使ったことがないのですが、よさげなので、検討してみます。
えらそうですいません。
それか、上のほうのように変数を宣言して適度に分けるかですよね。


> ファイルマッピングというと、CreateFileMapping/OpenFileMapping 系のAPIの事でしょうか?
そうです。マッピングしてハンドルから指し示すことができればとか考えていました。
OS上のメモリに載せてしまって、あとはハンドルから読むサイズを適当に分けてやってみようかなと。

何にしてもめんどくさそうな処理になりそうです。
ユーザー定義型からメンバを指し示すだけのところを自作する感じになるのですね。
とほほ・・・・です。

投稿時間:2004/09/09(Thu) 13:23
投稿者名:DOON
Eメール:
URL :
タイトル:
Re^3: 変数の最大
またDOONです。
クラスの作成を今完了しました。
確かに20M相当のクラスを製作できましたが
そのクラスに値を代入するだけでかなり時間がかかってしまいます。
そういうものなんですかね?
クラスの構造自体はかなり複雑です。

なので、クラスの中のあるメンバ変数に入れようとすると
クラス自体の再構築みたいなのが行われるのでしょうか?
そのクラスをグローバルで宣言しても、関数内で宣言しても
同様のことがおきます。

これは地道に小さい構造体にでもわけないといけないですかね

投稿時間:2004/09/09(Thu) 15:11
投稿者名:えめす
Eメール:
URL :
タイトル:
Re^4: 変数の最大
横から失礼します。
>20Mのデータが4つ入ったファイルを開けて、
>ひとつのデータを変数に読み込もうとしています。
ランダムアクセスファイルとして構造体利用すれば
問題ない気がしますがだめなんですか?

投稿時間:2004/09/09(Thu) 17:46
投稿者名:DOON
Eメール:
URL :
タイトル:
Re^5: 変数の最大
どうもすみません
DOONです。

構造体を宣言したら
64KB以上は作成できませんと怒られました。

20Mのデータを一つの構造体に入れて
それをいろいろ使いたいというのが理想です。

ランダムファイルで読むというのは
どういう形になることですか?
よろしくお願いします。

> ランダムアクセスファイルとして構造体利用すれば
> 問題ない気がしますがだめなんですか?

投稿時間:2004/09/10(Fri) 10:02
投稿者名:えめす
Eメール:
URL :
タイトル:
Re^6: 変数の最大
こんにちわ。
>構造体を宣言したら
>64KB以上は作成できませんと怒られました。
宣言ではなくメモリに領域を取った時かと思われるのですが・・

>20Mのデータを一つの構造体に入れて
>それをいろいろ使いたいというのが理想です。
そのデータが固定長なら、1つ1つのフィールドを構造体として用意し
ランダムアクセスとしてファイルをオープンする。
イメージ的にはファイルに構造体をくっつけてアクセスする感じです。
使い方はここのHPのファイル操作関係に記載されていますので。

投稿時間:2004/09/10(Fri) 23:15
投稿者名:DOON
Eメール:
URL :
タイトル:
Re^7: 変数の最大
お返事ありがとうございます。
> 宣言ではなくメモリに領域を取った時かと思われるのですが・・
そのとおりです。
> 使い方はここのHPのファイル操作関係に記載されていますので。
ファイル操作関係を読みましたが、どの事例でしょうか?
わかりませんでした。
よろしくお願いします。

投稿時間:2004/09/11(Sat) 17:05
投稿者名:えめす
Eメール:
URL :
タイトル:
Re^8: 変数の最大
> > 使い方はここのHPのファイル操作関係に記載されていますので。
> ファイル操作関係を読みましたが、どの事例でしょうか?
> わかりませんでした。
> よろしくお願いします。
ここのHPのファイル操作関係−>ランダムファイルの簡単な使用例(住所録作成)
サンプルソースを一読すればわかるかと・・

投稿時間:2004/09/12(Sun) 10:01
投稿者名:DOON
Eメール:
URL :
タイトル:
Re^9: 変数の最大
> ここのHPのファイル操作関係−>ランダムファイルの簡単な使用例(住所録作成)
> サンプルソースを一読すればわかるかと・・
何度も返事ありがとうございます。
今、意味が理解できました。
小さな構造体を宣言してそれをランダムファイルで
前から順番に読み込むということですね。
理解が遅くなりました。
ありがとうございます。