Bonne nuit,SQLite & Int64 à Int32 coulé en C#
J'ai une requête SQLite que j'exécutaient en C# en utilisant la commande ExecuteScalar()
. Le résultat dans une variable de type Object
qui est en fait une valeur de type Int64. Comme j'ai besoin de le lancer sur un Int32, j'ai essayé d'abord en utilisant Convert.ToInt32
et maintenant j'utilise (Int32)(Int64)Object
, bien que j'obtienne la même performance avec les deux. La question est que ce type de distribution semble prendre 6ms supplémentaires à effectuer, et la méthode concernée est un code critique qui devrait être exécuté aussi vite que possible ... Y at-il un moyen d'effectuer cette distribution plus rapidement, en utilisant, par exemple , opérateurs de bits ou une autre méthode?
Juste au cas où ce n'est pas possible, je ne comprends vraiment pas pourquoi le résultat de la requête est un Int64 ... est-il possible de le forcer à être un Int32?
Merci beaucoup.
Merci beaucoup. La première suggestion fonctionne et est plus rapide d'un facteur de 2-3x. – Miguel
Je l'ai seulement mentionné parce que j'ai des raisons de suspecter que ExecuteScalar crée juste un lecteur de données et renvoie le premier objet dans la première rangée/colonne. Cela signifierait qu'il fait aussi une opération de boxe supplémentaire. La différence devrait être assez triviale, mais je suppose que ce n'est pas dans ce cas. 6ms semble être un très long moment pour effectuer un double casting (avec conversion implicite) sur un boxed puis unboxed int64. Étiez-vous en train de tester la vitesse à l'intérieur d'un harnais de test? – wllmsaccnt