Skip to content

gestion des XML #107

Description

@Fr-Dae

es-ce possible d'optimisé le script precedent ?

Oui, il y a plusieurs façons d'optimiser le script précédent. Voici quelques suggestions :

Utiliser des dictionnaires au lieu de tableaux de hachage: Les dictionnaires sont plus rapides pour les opérations de recherche et de mise en correspondance de clé-valeur.

Eviter les appels à Debug.LogWarning dans la boucle: Cela peut réduire considérablement les performances si le nombre d'appels à Debug.LogWarning est élevé.

Eviter de faire un appel à GetEnumerator à chaque itération de la boucle: Il est plus efficace de stocker le IEnumerator dans une variable en dehors de la boucle.

Utiliser une expression ternaire pour retourner la valeur: Cela peut simplifier le code et le rendre plus lisible.

Voici un exemple d'optimisation :

using System.Collections.Generic;
using System.IO;
using System.Xml;
using UnityEngine;

public class Lang_Bot
{
    private Dictionary<string, string> strings;

    public Lang_Bot(string path, string language)
    {
        SetLanguage(path, language);
    }

    public void SetLanguage(string path, string language)
    {
        var xml = new XmlDocument();
        xml.Load(path);

        strings = new Dictionary<string, string>();
        XmlElement element = xml.DocumentElement[language];
        if (element != null)
        {
            IEnumerator elemEnum = element.GetEnumerator();
            while (elemEnum.MoveNext())
            {
                XmlElement xmlItem = (XmlElement)elemEnum.Current;
                strings[xmlItem.GetAttribute("name")] = xmlItem.InnerText;
            }
        }
        else
        {
            Debug.LogWarning(language + " doesn't exist");
        }
    }

    public string GetString(string name) => strings.TryGetValue(name, out var value) ? value : "";
}

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions