Skip to content

(中文)地图读写接口

肝帝熙恩 edited this page Sep 7, 2025 · 1 revision

图块生成器

TShock 内置了两个图块生成器,它们用不同的系统替换了 Terraria 的图块数据存储。此外,一个主要的插件开发者提供了额外的图块生成器集合。对于开发者来说,这些生成器实现了 ITile 接口并将自己注册为图块生成器。ITileOTAPI 提供。

默认情况下,Terraria 以相对未优化的方式存储图块。从理论上讲,这是访问图块最快的方式,但这是以内存为代价的。如果您运行的 Terraria 服务器内存有限,您可能希望回收内存并改为交换处理能力。这就是这些生成器的作用。

Constileation

Constileation 是 TShock 内置的最新图块生成器。它比 HeapTile 更快,并且节省内存。它每个图块使用 14 字节。使用 -c-constileation 命令行参数启动您的 TShock 服务器来使用此生成器。

HeapTile

HeapTile 是 TShock 内置的最早的图块生成器之一。同样,它提供内存优势,但与 Constileation 和 Tiled 相比真的很慢。使用 -heaptile 命令行参数启动您的 TShock 服务器来使用此生成器。

Tiled

thanatos 开发的 TShock 的 tiled 插件 提供了额外的图块生成器,包括他们的 1d2dstruct 生成器。我们敦促您查看并比较所有图块生成器,找到最适合您需求的生成器。Tiled 试图带来两全其美的效果,提供既能最小化内存使用又能提供适度性能的图块生成器。

图块生成器基准测试

@SignatureBeef 对各种图块生成器进行了基准测试。这里转载了 TSAPI PR #231 中的一些运行示例。对于这些测试,以下是生成器:

  • Stock 是 Terraria 服务器的原始配置。
  • HeapHeapTile
  • ConstileationConstileation
  • 1d 来自 Tiled
  • 2d 来自 Tiled
  • Struct 来自 Tiled

基准测试:每个生成器对小世界中的每个图块调用 .active 的速度

Method Mean Error StdDev Ratio RatioSD
Active_Stock 31.78 ms 0.456 ms 0.426 ms 1.00 0.00
Active_Heap 122.07 ms 2.413 ms 2.370 ms 3.84 0.09
Active_Constileation 40.41 ms 0.575 ms 0.510 ms 1.27 0.02
Active_1d 52.94 ms 0.731 ms 0.648 ms 1.66 0.03
Active_2d 54.96 ms 1.083 ms 1.064 ms 1.73 0.05
Active_Struct 61.59 ms 0.651 ms 0.544 ms 1.93 0.03

基准测试:生成器对小世界中的每个图块发布和存储自己数据的速度

Method Mean Error StdDev Ratio RatioSD
AssignFromSelf_Stock 34.30 ms 0.486 ms 0.454 ms 1.00 0.00
AssignFromSelf_Heap 267.03 ms 3.455 ms 3.062 ms 7.79 0.15
AssignFromSelf_Constileation 42.30 ms 0.664 ms 0.621 ms 1.23 0.03
AssignFromSelf_1d 208.46 ms 2.823 ms 2.640 ms 6.08 0.10
AssignFromSelf_2d 242.42 ms 4.669 ms 6.234 ms 7.11 0.24
AssignFromSelf_Struct 278.45 ms 4.580 ms 4.284 ms 8.12 0.13

基准测试:生成器对小世界中的每个图块转换其他图块数据(如 Terraria.Tile)的速度

Method Mean Error StdDev Ratio
AssignFromTile_Stock 433.3 ms 7.22 ms 6.40 ms 1.00
AssignFromTile_Heap 210.4 ms 3.33 ms 3.11 ms 0.49
AssignFromTile_Constileation 195.7 ms 2.45 ms 2.29 ms 0.45
AssignFromTile_1d 239.0 ms 2.07 ms 1.83 ms 0.55
AssignFromTile_2d 240.5 ms 3.03 ms 2.69 ms 0.56
AssignFromTile_Struct 277.6 ms 3.74 ms 3.49 ms 0.64

基准测试:生成器对小世界中的每个图块清除图块数据(使用方法)的速度

Method Mean Error StdDev Ratio RatioSD
Clear_Stock 308.8 ms 3.90 ms 3.65 ms 1.00 0.00
Clear_Heap 479.1 ms 9.20 ms 9.84 ms 1.55 0.03
Clear_Constileation 331.2 ms 2.16 ms 1.92 ms 1.07 0.01
Clear_1d 557.8 ms 3.24 ms 3.03 ms 1.81 0.03
Clear_2d 692.9 ms 20.61 ms 59.78 ms 2.14 0.16
Clear_Struct 789.2 ms 13.95 ms 22.93 ms 2.60 0.11

基准测试:生成器对小世界中的每个图块运行类似于原版中清理世界功能的逻辑的速度

Method Mean Error StdDev Ratio RatioSD
ClearWorld_Stock 79.27 ms 0.669 ms 0.593 ms 1.00 0.00
ClearWorld_Heap 239.87 ms 2.324 ms 2.060 ms 3.03 0.03
ClearWorld_Constileation 62.48 ms 0.948 ms 0.887 ms 0.79 0.01
ClearWorld_1d 139.73 ms 1.621 ms 1.516 ms 1.76 0.02
ClearWorld_2d 151.27 ms 2.341 ms 2.190 ms 1.91 0.03
ClearWorld_Struct 177.16 ms 3.190 ms 2.828 ms 2.23 0.05

基准测试:生成器对小世界中的每个图块发布图块数据的速度

Method Mean Error StdDev Ratio RatioSD
Gets_Stock 17.49 ms 0.224 ms 0.210 ms 1.00 0.00
Gets_Heap 100.88 ms 2.007 ms 2.465 ms 5.76 0.17
Gets_Constileation 27.15 ms 0.513 ms 0.455 ms 1.55 0.03
Gets_1d 29.46 ms 0.431 ms 0.403 ms 1.68 0.03
Gets_2d 27.93 ms 0.258 ms 0.242 ms 1.60 0.02
Gets_Struct 33.77 ms 0.671 ms 1.719 ms 1.85 0.08

基准测试:生成器对小世界中的每个图块更改图块类型的速度

Method Mean Error StdDev Ratio RatioSD
Type_Stock 28.41 ms 0.420 ms 0.393 ms 1.00 0.00
Type_Heap 120.99 ms 2.317 ms 2.480 ms 4.25 0.10
Type_Constileation 36.95 ms 0.732 ms 0.977 ms 1.30 0.04
Type_1d 38.65 ms 0.686 ms 1.027 ms 1.38 0.04
Type_2d 39.64 ms 0.405 ms 0.359 ms 1.40 0.02
Type_Struct 43.09 ms 0.749 ms 0.664 ms 1.52 0.03

基准测试:测试生成器对小世界中的每个图块调用基本操作(如清除、类型更改和 .active)的速度

Method Mean Error StdDev Ratio RatioSD
Use_Stock 359.4 ms 4.67 ms 4.14 ms 1.00 0.00
Use_Heap 666.4 ms 10.78 ms 10.08 ms 1.86 0.04
Use_Constileation 407.3 ms 5.87 ms 5.20 ms 1.13 0.02
Use_1d 654.5 ms 7.30 ms 6.83 ms 1.82 0.03
Use_2d 741.7 ms 8.19 ms 7.66 ms 2.07 0.03
Use_Struct 1,235.3 ms 7.60 ms 7.11 ms 3.44 0.03
Clone this wiki locally