Оптимизировать код для уменьшения влияния отражений на производительность - PullRequest
0 голосов
/ 22 сентября 2018

Я строю веб-интерфейс API. На .Net Core и ADO.Net

. Я использую этот код для заполнения объекта моей модели из DataRow:

public IEnumerable<TEntity> Map(DataTable table)
    {
        List<TEntity> entities = new List<TEntity>();
        var columnNames = table.Columns.Cast<DataColumn>().Select(x => x.ColumnName).ToList();
        var properties = (typeof(TEntity)).GetProperties().ToList();

        foreach (DataRow row in table.Rows)
        {
            TEntity entity = new TEntity();
            foreach (var prop in properties)
            {
                PropertyMapHelper.Map(typeof(TEntity), row, prop, entity);
            }
            entities.Add(entity);
        }

        return entities;
    }

И использую этот другойкод для создания необходимой команды SQL Update:

protected void base_UpdateCommand(IDbCommand myCommand, TEntity entity, string sWhere)
    {
        var properties = (typeof(TEntity)).GetProperties().ToList();
        string sProps = "";
        string sCommand = "";

        foreach (var prop in properties)
        {                
            bool bIgnore = prop.GetCustomAttributes(true).Any(a => a is KeyAttribute);
            if (prop.Name.ToUpper() != sKeyField.ToUpper() && !bIgnore)
            {
                sProps = sProps + prop.Name + "=@" + prop.Name + ", ";

                var p = myCommand.CreateParameter();
                p.ParameterName = prop.Name;
                if (prop.GetValue(entity) == null)
                    p.Value = DBNull.Value;
                else
                    p.Value = prop.GetValue(entity);

                myCommand.Parameters.Add(p);
            }
        }
        sProps = sProps.Substring(0, sProps.Length - 2);

        sCommand = "UPDATE [" + sTable + "] SET " + sProps;
        sCommand = sCommand + " WHERE " + sWhere;

        myCommand.CommandText = sCommand;
    }

Я знаю, что отражение влияет на производительность, поэтому я ищу предложение о том, как улучшить этот код.Спасибо!

1 Ответ

0 голосов
/ 23 сентября 2018

Вы можете рассмотреть возможность использования Dapper.Это обертка вокруг ADO.NET, поэтому технически она не может быть быстрее, чем ADO.NET, но в большинстве случаев она использует лучшие методы кодирования по сравнению с пользовательским кодом, который вы используете для манипулирования данными с помощью ADO.NET, поэтому потенциально он может дать лучшие результаты производительности .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...