Skip to content

Commit

Permalink
Remove lots of boxing from EnvironmentVariablesConfigurationProvider.…
Browse files Browse the repository at this point in the history
…Load (#47453)
  • Loading branch information
stephentoub authored Jan 26, 2021
1 parent e8ccd42 commit 14589b1
Showing 1 changed file with 50 additions and 41 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -42,53 +42,62 @@ internal void Load(IDictionary envVariables)
{
var data = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);

foreach (DictionaryEntry entry in envVariables)
IDictionaryEnumerator e = envVariables.GetEnumerator();
try
{
string key = (string)entry.Key;
string provider = null;
string prefix;

if (key.StartsWith(MySqlServerPrefix, StringComparison.OrdinalIgnoreCase))
{
prefix = MySqlServerPrefix;
provider = "MySql.Data.MySqlClient";
}
else if (key.StartsWith(SqlAzureServerPrefix, StringComparison.OrdinalIgnoreCase))
{
prefix = SqlAzureServerPrefix;
provider = "System.Data.SqlClient";
}
else if (key.StartsWith(SqlServerPrefix, StringComparison.OrdinalIgnoreCase))
{
prefix = SqlServerPrefix;
provider = "System.Data.SqlClient";
}
else if (key.StartsWith(CustomPrefix, StringComparison.OrdinalIgnoreCase))
{
prefix = CustomPrefix;
}
else if (key.StartsWith(_prefix, StringComparison.OrdinalIgnoreCase))
while (e.MoveNext())
{
// This prevents the prefix from being normalized.
// We can also do a fast path branch, I guess? No point in reallocating if the prefix is empty.
key = NormalizeKey(key.Substring(_prefix.Length));
data[key] = entry.Value as string;
DictionaryEntry entry = e.Entry;
string key = (string)entry.Key;
string provider = null;
string prefix;

continue;
}
else
{
continue;
}
if (key.StartsWith(MySqlServerPrefix, StringComparison.OrdinalIgnoreCase))
{
prefix = MySqlServerPrefix;
provider = "MySql.Data.MySqlClient";
}
else if (key.StartsWith(SqlAzureServerPrefix, StringComparison.OrdinalIgnoreCase))
{
prefix = SqlAzureServerPrefix;
provider = "System.Data.SqlClient";
}
else if (key.StartsWith(SqlServerPrefix, StringComparison.OrdinalIgnoreCase))
{
prefix = SqlServerPrefix;
provider = "System.Data.SqlClient";
}
else if (key.StartsWith(CustomPrefix, StringComparison.OrdinalIgnoreCase))
{
prefix = CustomPrefix;
}
else if (key.StartsWith(_prefix, StringComparison.OrdinalIgnoreCase))
{
// This prevents the prefix from being normalized.
// We can also do a fast path branch, I guess? No point in reallocating if the prefix is empty.
key = NormalizeKey(key.Substring(_prefix.Length));
data[key] = entry.Value as string;

// Add the key-value pair for connection string, and optionally provider name
key = NormalizeKey(key.Substring(prefix.Length));
AddIfPrefixed(data, $"ConnectionStrings:{key}", (string)entry.Value);
if (provider != null)
{
AddIfPrefixed(data, $"ConnectionStrings:{key}_ProviderName", provider);
continue;
}
else
{
continue;
}

// Add the key-value pair for connection string, and optionally provider name
key = NormalizeKey(key.Substring(prefix.Length));
AddIfPrefixed(data, $"ConnectionStrings:{key}", (string)entry.Value);
if (provider != null)
{
AddIfPrefixed(data, $"ConnectionStrings:{key}_ProviderName", provider);
}
}
}
finally
{
(e as IDisposable)?.Dispose();
}

Data = data;
}
Expand Down

0 comments on commit 14589b1

Please sign in to comment.