2004.01.02 (金) 14:18:03 <u*j*2*6*> 4GB以上のファイルを共有できるようになります。
2004.01.02 (金) 14:22:32 <u*j*2*6*> ただし、8388608TB以上のファイルサイズは扱えません。サーバーの総ファイルサイズなどでこの制限にひっかかる可能性が少しだけあります。
2004.01.02 (金) 14:25:20 <u*j*2*6*> 下のhandler.pasの修正をわすれると内部エラーURW699がでてDelphi自体を再起動しなきゃいけなくなるので気をつけてください
2004.01.09 (金) 23:25:03 <Heracules> Longword(32bit)→Int64(64bit)にすることでメモリ使用量増えそう・・・(苦笑
2004.01.09 (金) 23:26:22 <Heracules> ファイルの容量に応じて宣言変えてメモリ使用量を調節できたりしないかなぁw
2004.01.09 (金) 23:38:37 <u*j*2*6*> たとえば32ビット×1000人×1人平均1000ファイル=4MB余計にメモリを使うことになるのかな
2004.01.10 (土) 00:01:53 <u*j*2*6*> ふつうのTShare型とは別にTShareInt64(sizeがInt64型)を宣言して、share.pasのCreateShareItem?関数の中でどっちの型の変数を生むか選ぶようにすればよさそう。
2004.01.10 (土) 00:07:05 <u*j*2*6*> CreateShareItem?は、Boolean型の引数(名前はIsSizeInt64とか)をとるように改良して、handler.pasのShareFile?関数の中でTrue/Falseを判断してCreateShareItem?をよぶ。これでどうかな
2004.01.10 (土) 00:11:16 <u*j*2*6*> あ、FreeShareItem?のほうもわすれずに
2004.01.10 (土) 00:36:51 <u*j*2*6*> ほかにもhandler.pasをいろいろ書き換えなきゃいけなくてめんどうかも
2004.01.10 (土) 07:28:16 <Heracules> どうせやるならShortInt?とかIntとかそこらへんも組み合わせてサイズに従っていろいろと・・・の方がいいとは思う。
2004.01.10 (土) 07:28:48 <Heracules> やるなら、同じことを複数回やるだけだしw ・・・まぁ、面倒だし非現実的ではあるね
2004.01.10 (土) 07:30:03 <Heracules> 少しずれるけど、ShareのshortのNAMEをなくすとメモリ使用量は減りそうだけど、AnsiPos?の負荷増えるよね(2.1.1の話でごめんw
2004.01.15 (木) 14:42:06 <name over> VCLのAnsiPos?などの関数は大分最適化されているはず。最近のCPUパワーのインフレからしたら、AnsiPos?の負荷は対して問題にならないかもよ?でも、(続く)
2004.01.15 (木) 14:43:49 <name over> (続き) やっぱり一度やってみて色んなパターンでのパフォーマンスを厳密に測定してみる方が、結論は確実ですが。
2004.01.15 (木) 14:52:15 <name over> そういう実験用のベータバージョンとかあればいいかも知れないです。
2004.01.15 (木) 20:58:06 <u*j*2*6*> TShare.shortはファイル名と検索語を効率よく比較するためだけに使われてますね。
2004.01.15 (木) 20:59:00 <u*j*2*6*> handler.pasのtmp_pos=1245, 337で、AnsiPos?(検索語, TShare.short)みたいに使われてるだけですね
2004.01.15 (木) 21:15:51 <u*j*2*6*> 仮にTShare.shortをやめてTShare.Nameを使うことにすると、毎回の検索ごとにExtractMPNameの作業を繰り返すことになりそう
2004.01.15 (木) 21:23:23 <u*j*2*6*> てきとうにあつめたファイル名10000個と検索語100組を用意して、コンパクトな比較プログラムを作ってファイルの登録処理+検索処理でかかった時間をくらべてみるといいかもねー
2004.01.15 (木) 22:47:52 <Heracules> 各ディレクトリごとにTShareみたいな型を格納(?)してく形にしてやれば、ファイル名だけですむかもしれない。フルパスを各ファイルごとにTShareで保存するよりもメモリ使用量も減るし。
2004.01.15 (木) 22:48:11 <Heracules> って思ったんだけどどうかなぁw
2004.01.15 (木) 23:15:11 <u*j*2*6*> TShareList?.dirsというのがそれな気がする

shuusei241103:4GB以上のファイルサイズに対応

diff --dos -urN 241102/constants.pas 241103/constants.pas
--- 241102/constants.pas	Sat Dec 27 14:37:34 2003
+++ 241103/constants.pas	Fri Jan 02 13:15:22 2004
@@ -28,7 +28,7 @@
  SLAVANAP_BUILD               = '108';
  SLAVANAP_BUILD_DATE          = '24 January 2003';
  SLAVANAP_SHUUSEI             = '102';
- SLAVANAP_SHUUSEI_DATE        = '27 December 2003';
+ SLAVANAP_SHUUSEI_DATE        = '02 January 2004';
  SLAVANAP_VERSION_SHORT       = SLAVANAP_TITLE+' '+SLAVANAP_VERSION;
  SLAVANAP_FULL                = SLAVANAP_TITLE+' '+SLAVANAP_VERSION+
                                 ' (build '+SLAVANAP_BUILD+
diff --dos -urN 241102/handler.pas 241103/handler.pas
--- 241102/handler.pas	Thu Oct 23 23:39:18 2003
+++ 241103/handler.pas	Fri Jan 02 13:14:32 2004
@@ -2460,9 +2460,9 @@
       local.join_delay := INITIAL_JOIN_DELAY;
     inc(total_files);
     inc(local_files);
-    inc(total_bytes,Int64(rec.size));
-    inc(local_bytes,Int64(rec.size));
-    inc(local.shared_size,Int64(rec.size));
+    inc(total_bytes, rec.size);
+    inc(local_bytes, rec.size);
+    inc(local.shared_size, rec.size);
     local.localstate:=local.localstate+[locNeedsUpdate];
     if local_files_max<local_files then local_files_max:=local_files;
     if total_files_max<total_files then total_files_max:=total_files;
@@ -2889,7 +2889,7 @@
  tmp_pos:=324;
  if j<>-1 then
  begin
-   n:=Int64(PShare(local.shared.Items[j])^.size);
+   n:= PShare(local.shared.Items[j])^.size;
    p:=local.shared.Items[j];
    shared:=opIsShared(p^.options);
    kw:=p^.keywords^[0];
diff --dos -urN 241102/share.pas 241103/share.pas
--- 241102/share.pas	Mon Nov 18 11:54:52 2002
+++ 241103/share.pas	Fri Jan 02 13:13:38 2004
@@ -96,7 +96,7 @@
     name         : String; // full file name
     crc          : Word; // crc of full filename. used for faster file search.
     index        : Word; // index in folders list
-    size         : LongWord; // size in bytes
+    size         : Int64; // size in bytes
     options      : LongWord; // options bits
                    // bits 0..9 = bitrate (0..1023)
                    // bits 10..12 = frequency (FREQ_xxx constants)