C'est la lecture de l'app.config cher?
Pas de question, je suis encore à être frappé par une vitesse de lecture de goulot d'étranglement. Je demande à savoir, si la lecture d'application.config est souvent un mauvais choix de programmation. J'ai connu des opérations de base de données devient cher.
Dans mon cas, je ne suis pas à la lecture de mon propre application.config, mais d'un autre projet de, comme ceci:
private string GetAppConfigValue(string key)
{
ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap();
fileMap.ExeConfigFilename = GetConfigFilePath();
Configuration appConfig = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);
return appConfig.AppSettings.Settings[key].Value;
}
Scénario: j'ai un gérant de classe (et une seule classe) où j'ai commencé à lire quelques valeurs (3 à 4) à partir d'un fichier de configuration spécifié par un chemin d'accès physique, mais de nombreuses fois. Ai-je besoin d'avoir quelques variables pour stocker les valeurs à partir de l'app.fichier de config? Quelle serait la meilleure approche. Merci.
- Vous pourriez toujours le cache
appConfig
en valeur statique de sorte que vous n'avez qu'à lire app.config une fois. - thats droit. Ma question est, est-ce la bonne façon de faire? Est-il des performances? etc
- Quelle est la qualité de la connexion réseau à l'application remote.config?
- haha c'est sur la même machine 🙂
- depuis sa un XML document basé sur le cadre interne de parser le document, et définitivement ses performances. Pour votre information, dans la dernière .net framework tous les fichiers de configuration sont JSON en fonction à la place de XML en fonction.
- La lecture d'une application de config avec ConfigurationManager de la fusion dans la configuration de la machine qui va ajouter dans une performances (bien que je crois que ça va être mis en cache après le premier accès). Vous pouvez écrire votre propre code pour lire le fichier de configuration à l'aide de XmlDocument et XPath si vous connaissez la config est dans votre fichier.
Vous devez vous connecter pour publier un commentaire.
Je suis sûr que tous les fichiers de configuration(web.config ou app.config) sont mises en cache par défaut, de sorte que vous n'avez pas besoin de créer une classe statique qui contient toutes les valeurs ou de peur que les fichiers sont accessibles en permanence.
Voici un peu de lecture:
Sujet de votre condition pour accéder à une autre application de fichier de configuration:
MSDN: "Ces méthodes(remarque: pour les applications client: ConfigurationManager.GetSection) permettent d'accéder à la version en cache les valeurs de configuration de l'application en cours, qui a de meilleures performances que la Configuration de la classe."
En d'autres termes: Oui, vous devriez le mettre en cache quand il n'est pas de votre propre application de fichier de configuration.
Tout ce qui se termine avec des e /s disque est cher (certainement lorsque l'on parle de support en rotation).
Voir Quels sont les nombres que chaque ingénieur en informatique devrait connaître, selon Jeff Dean? sur Quora pour voir les différences dans la vitesse.
Si vous êtes à la lecture d'un fichier à plusieurs reprises, vous devriez mettre en cache les résultats (en particulier si le fichier ne change pas).
Lors de l'utilisation de la configuration par défaut, le
.config
fichier ne se fait jamais lu une seule fois, au démarrage de l'application et les résultats sont mis en cache dans la mémoire.Mise à jour, par exemple comme l'a demandé:
En supposant qu'il vit dans une classe qui a la durée de vie de l'application, vous avez maintenant mis en cache de la configuration dans la mémoire pour la durée de vie de l'application.
Config
objet.Vous n'êtes pas vraiment en train de faire des I/O de ici, du moins pas directement.
Tout simplement prendre la Config system met en cache les valeurs, et de prendre des mesures lorsque vous avez un problème de performance.
C'est pas la peine d'encombrer votre code avec le BRICOLAGE de la mise en cache partout.
appConfig
environ, mais cela dépend vraiment de combien d'appels que vous faites et la portée cela est nécessaire.De lecture à partir de l'app.la config est seulement une première fois lorsque vous avez exécuté l'application. Après cela, il va stocker cette configuration dans la mémoire et lire à partir de quand vous en avez besoin accès. C'est pourquoi, l'évolution dans l'app.config n'affectera pas pour le courant de l'exécution de l'application.
Tandis que les valeurs à partir de l'app.config sont en train d'être mis en cache, souvent à les lire dans un scénario multithread peut introduire un sérieux gain de performance. Si vous avez accès à la configuration des valeurs en même temps, elle sera mieux à l'utilisation que vous possédez la mise en cache. Vous pouvez bénéficier d'une implémentation personnalisée de la AppSettingsBase classe.
En général, enveloppant la configuration par défaut du gestionnaire dans une mise en sera une bonne décision de conception dans la plupart des cas. Il vous tient non seulement à l'abri des changements à votre clientèle (?) paramètres de configuration de noms. Mais aussi vous donne la souplesse nécessaire pour mettre en cache les valeurs ou les obtenir à partir de toute autre source qui pourrait etre/obtenir important.