- Unity 2017 Game Optimization(Second Edition)
- Chris Dickinson
- 319字
- 2021-07-02 23:21:07
Use appropriate data structures
C# offers many different data structures in the System.Collections namespace and we shouldn't become too accustomed with using the same ones over and over again. A common performance problem in software development is making use of an inappropriate data structure for the problem we're trying to solve simply because its convenient. The two most commonly used are perhaps lists (List<T>), and dictionaries (Dictionary<K,V>).
If we want to iterate through a set of objects then a list is preferred, since it is effectively a dynamic array where the objects and/or references reside next to one another in memory, and therefore iteration causes minimal cache misses. Dictionaries are best used if two objects are associated with one-another and we wish to acquire, insert, or remove these associations quickly. For example, we might associate a level number with a particular Scene file, or an enum representing different body parts on a character, with Collider Components for those body parts.
However, it's fairly common where we want a data structure that handles both scenarios; we want to quickly figure out which object maps to another, while also being able to iterate through the group. Typically, the developer of this system will use a dictionary, and then iterate over it. However, this process is unfortunately very slow compared to iterating over a list since it must check every potential hash in the dictionary in order to iterate over it fully.
In these cases, its often better to store data in both a list and a dictionary to better support this behaviour. This will cost additional memory overhead to maintain multiple data structures, and insertion and deletion will require adding and removing objects from both data structures each time, but the benefits on iteration on the list (which tend to happen way more often) will be a stark contrast compared to iterating over a dictionary.
- 數(shù)據(jù)庫系統(tǒng)原理及MySQL應(yīng)用教程(第2版)
- ClickHouse性能之巔:從架構(gòu)設(shè)計(jì)解讀性能之謎
- Java程序設(shè)計(jì)實(shí)戰(zhàn)教程
- Python自然語言處理實(shí)戰(zhàn):核心技術(shù)與算法
- HTML5+CSS3基礎(chǔ)開發(fā)教程(第2版)
- Selenium Design Patterns and Best Practices
- jQuery從入門到精通 (軟件開發(fā)視頻大講堂)
- 編譯系統(tǒng)透視:圖解編譯原理
- JavaScript入門經(jīng)典
- Python圖形化編程(微課版)
- Azure Serverless Computing Cookbook
- C++編程兵書
- AutoCAD基礎(chǔ)教程
- Unity 5 Game Optimization
- Enterprise Application Architecture with .NET Core