日別アーカイブ: 2013年6月23日

24日目+1 データベースを使わない方法を模索

データベースを使おうと思ったり理由は、実機テストで信じられないくらい時間がかかったため。

Win32 では数秒の処理が数十分かかった。

これはどうも、動的配列を逐次大きくして追加していた部分にあったみたい

procedure TWordList.AddItem(aWordRecord: TWordRecord);
begin
  SetLength(Self.Items, Length(Self.Items) + 1);
  Self.Items[High(Items)].Assign(aWordRecord);
end;

procedure TWordList.Load(aPathFileName: string);
var
  i: Integer;
  tmpWordRecord: TWordRecord;
  tmpRecordList: TStringList;
  tmpFieldList: TStringList;
  tmpString: String;
begin

//  DeleteFile(aPathFileName);

  self.Clear;

  if FileExists(aPathFileName) then
  begin
    tmpFieldList  := TStringList.Create;
    tmpRecordList := TStringList.Create;

    tmpRecordList.LoadFromFile(aPathFileName);

    for i := 0 to tmpRecordList.Count - 1 do
    begin

      tmpFieldList.Delimiter := chr(DEMILITR_CHR);
      tmpFieldList.StrictDelimiter := False;

      tmpString := tmpRecordList[i];
      tmpFieldList.DelimitedText := tmpString;

      tmpWordRecord.Word := trim(tmpFieldList[0]);
      tmpWordRecord.Japanese := trim(tmpFieldList[1]);
      tmpWordRecord.Japanese := StringReplace(tmpWordRecord.Japanese, chr(ESCAPE_COMMA_CHR), ',', [rfReplaceAll]);
      tmpWordRecord.Japanese := StringReplace(tmpWordRecord.Japanese, chr(ESCAPE_SPACE_CHR), ' ', [rfReplaceAll]);

      self.AddItem(tmpWordRecord);

    end;
    tmpRecordList.Free;
    tmpFieldList.Free;
  end;

end;

最初に配列の大きさを決定して、代入するととてつもなく早くなった。
これで、データベースを使う必要はなくなった。


procedure TWordList.Load(aPathFileName: string);
var
  i: Integer;
  tmpWordRecord: TWordRecord;
  tmpRecordList: TStringList;
  tmpFieldList: TStringList;
  tmpString: String;
begin

  self.Clear;

  if FileExists(aPathFileName) then
  begin

    tmpFieldList  := TStringList.Create;
    tmpRecordList := TStringList.Create;

    tmpRecordList.LoadFromFile(aPathFileName);

    SetLength(Self.Items, tmpRecordList.Count);

    for i := 0 to tmpRecordList.Count - 1 do
    begin

      tmpFieldList.Delimiter := chr(DEMILITR_CHR);
      tmpFieldList.StrictDelimiter := False;

      tmpString := tmpRecordList[i];
      tmpFieldList.DelimitedText := tmpString;

      tmpWordRecord.Word := trim(tmpFieldList[0]);
      tmpWordRecord.Japanese := trim(tmpFieldList[1]);
      tmpWordRecord.Japanese := StringReplace(tmpWordRecord.Japanese, chr(ESCAPE_COMMA_CHR), ',', [rfReplaceAll]);
      tmpWordRecord.Japanese := StringReplace(tmpWordRecord.Japanese, chr(ESCAPE_SPACE_CHR), ' ', [rfReplaceAll]);


      Self.Items[i].Assign(tmpWordRecord);

//      self.AddItem(tmpWordRecord);

    end;
    tmpRecordList.Free;
    tmpFieldList.Free;
  end;

end;


24日目+1 InterBase のライセンス認証で四苦八苦

InterBase のライセンス認証で四苦八苦する。

メールで送られてきたライセンス使用許諾ファイルをどこに置くかわからない。

製品: IBLite XE3 for iOS Deployment License
メールで説明されている手順:
1. まず、添付ファイルをハード ドライブ上の任意のフォルダ (“マイ ドキュメント” など) に保存します。
2. RAD Studio XE4 ユーザーのお客様が IBLite ライセンスを必要とされる場合には、上記のライセンス ファイルを “%IBREDISTDIR%” フォルダにコピーします。
3. その後、RAD Studio の配置ウィザードの指示に従って進みます。ファイルは必ず、アプリケーションと一緒にターゲット プラットフォーム向けにバンドルし、ターゲット プラットフォームの interbase/license フォルダ パスに配布してください。
実際にうまくいった手順:
ライセンス ファイルを “%IBREDISTDIR%” フォルダにコピーして、reg_iblite にリネームする。

“%IBREDISTDIR%” フォルダとは

C>ユーザー>パブリック>パブリックのドキュメント>InterBase>redist>InterBaseXe3 (OS:Windows 7)

製品: InterBase XE3 ToGo Test Deployment
RAD Studio XE4 ユーザー様の場合:
ライセンス使用許諾ファイルを “%IBREDISTDIR%” フォルダに reg_ibtogo.txt という名前で保存します。これは、Windows、MacOSX、iOS への配置に適用されます。

とりあえず、iOS Simulator では動作を確認、しかし、実機でのテストではエラー発生。配置のミスか?