TList

データ解析ツールの作成 

仕事で受託したデーター解析ツールの作成のこと。

カメラが捉えた人物の行動がデータ化されて順次PCへ送られてくるのですが、そのデータを解析してまとめた上でわかりやすいデータとして表示するという案件。

このデータというのが膨大な量で、データベースを利用して解析しようとすると時間がかかりすぎるのです。そのため ON Memory + CPU パワーの力技で高速化をはかったのですが、その際に使ったのが TList。

レコード型の動的変数を使うよりも遥かに大量のデータがメモリーへ持てるようです。(レコード型の動的変数はある一定の量になるとデータが壊れてしまうという経験をした)

サンプルコード
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
procedure TForm1.Button1Click(Sender: TObject);
type
  TData = record
    a : string;
    b : Integer;
  end;
 
var
  lst: TList;
  p: ^TData;
  i: Integer;
begin
  //生成
  lst := TList.Create;
 
  //追加
  New(p);
  p^.a := 'abc';
  p^.b := 100;
  lst.Add(p);
 
  //もう 1件追加
  New(p);
  p^.a := 'def';
  p^.b := 999;
  lst.Add(p);
 
  //使用
  for i:=0 to lst.Count -1 do
  begin
    p := lst[i];
    Memo1.Lines.Add(p^.a + ' - ' + IntToStr(p^.b));
  end;
 
  //削除
  for i:=lst.Count -1 downto 0 do
  begin
    p := lst[i];
    Dispose(p);
    lst.Delete(i);
  end;
 
  //開放(リストを完全に削除してから開放すること)
  FreeAndNil(lst);
 
end;

使い方を誤るとメモリーリークするので絶対のお勧めとは言えませんが、データを ON Memory で高速に処理する必要がある場合にはとても役立つオブジェクトです。

ポインタを扱う知識が無くてもそれなりに安全に実行できますしね。