DGKumar Ответов: 2

Как написать лучшую логику производительности на языке Си#


Не могли бы вы, пожалуйста, предложить для приведенного ниже кода правильный или любой лучший способ существует для приведенного ниже кода
Главное здесь то, что объект должен получать до и после данных для основного действия пользователя для нескольких пользователей до тех пор, пока объект коллекции не будет готов перейти к основному методу.

Что я уже пробовал:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp2
{
    class Program
    {
        static void Main(string[] args)
        {
            List<object> consolidatedAuditEvent = new List<object>();
            List<MyApplication> listMyApplication = new List<MyApplication>();
            int max = 30;
            Audit objAudit = new Audit();
            for (int i=0;i< max; i++)
            {
                MyApplication objMyApplication = new MyApplication();
                objMyApplication.id = i;
                objMyApplication.MyResponse = objAudit.PostAuditData(null,i);
                listMyApplication.Add(objMyApplication);
            }
            if (listMyApplication != null && listMyApplication.Count > 0)
            {
                for (int i = 0; i < max; i++)
                {
                    var jjj = listMyApplication.Find(x => x.id == i);
                    jjj.MyResponse = objAudit.PostAuditData(jjj.MyResponse,i);
                    consolidatedAuditEvent.Add(jjj.MyResponse);
                }
            }

            if (consolidatedAuditEvent != null)
            {
                foreach (MyResponse result in consolidatedAuditEvent)
                {
                    Console.WriteLine(result.AfterName + result.BeforeName);
                }
                Console.Read();
            }
        }
    }
    public class MyApplication { public int id { get; set; }
        public MyResponse MyResponse { get; set; }

    }

    public class MyResponse
    {
        public string BeforeName { get; set; }
        public string AfterName { get; set; }


    }

    public class Audit
    {
        public MyResponse PostAuditData( MyResponse objMyResponse,int i)
        {
            MyResponse obj = objMyResponse == null ? new MyResponse(): objMyResponse;
            if (objMyResponse == null)
                obj.BeforeName = "BeforeName"+i;
            else
                obj.AfterName = "AfterName"+i;
            return objMyResponse = obj;

        }

    }
}

Gerry Schmitz

Должны ли мы предполагать, что существует "проблема производительности"? Или мы просто "ищем" его? Независимо от того, существует она или нет ....

2 Ответов

Рейтинг:
2

wassim laribi

you can do something like this 
No need for Audit class 
No need to 2 loops to do the same things



using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp2
{
    class Program
    {
        static void Main(string[] args)
        {
            var consolidatedAuditEvent = new List<object>();
            var listMyApplication = new List<MyApplication>();

            int max = 30;

            for (int i = 0; i < max; i++)
            {
                var objMyApplication = new MyApplication();
                objMyApplication.id = i;
                objMyApplication.MyResponse = PostAuditData(null, i);

                listMyApplication.Add(objMyApplication);
                consolidatedAuditEvent.Add(objMyApplication.MyResponse);
            }

            if (consolidatedAuditEvent != null)
            {
                foreach (MyResponse result in consolidatedAuditEvent)
                {
                    Console.WriteLine(result.AfterName + result.BeforeName);
                }
                Console.Read();
            }
        }

        public static MyResponse PostAuditData(MyResponse objMyResponse, int i)
        {
            if(objMyResponse == null)
            {
                objMyResponse = new MyResponse();
                objMyResponse.BeforeName = "BeforeName" + i;
            }
            else
            {
                objMyResponse.AfterName = "AfterName" + i;
            }
            return objMyResponse;
        }
    }
    public class MyApplication
    {
        public int id { get; set; }
        public MyResponse MyResponse { get; set; }

    }

    public class MyResponse
    {
        public string BeforeName { get; set; }
        public string AfterName { get; set; }
    }
    
}


Рейтинг:
13

OriginalGriff

Что ж... Я понятия не имею, в чем может заключаться ваша проблема с "логикой производительности", но этот код-это гм ... менее чем результативно.
Посмотри, что ты делаешь.:

public MyResponse PostAuditData( MyResponse objMyResponse,int i)
        {
            MyResponse obj = objMyResponse == null ? new MyResponse(): objMyResponse;
            if (objMyResponse == null)
                obj.BeforeName = "BeforeName"+i;
            else
                obj.AfterName = "AfterName"+i;
            return objMyResponse = obj;

        }
Поэтому первая строка проверяет, является ли она нулевой, и если да, то заменяет ее новым экземпляром.
И вторая строка снова проверяет, является ли она нулевой. Почему? Зачем делать два чека?
И в конце концов вы присваиваете значение не-ref и нетoutput параметр и вернуть его. Почему?

Первый БИТ можно было бы лучше сделать с помощью нулевого коалесцирующего оператора
MyResponse obj = objMyResponse ?? new MyResponse();

но комбинировать их проще и очевиднее:
public MyResponse PostAuditData(MyResponse objMyResponse, int i)
    {
    if (objMyResponse == null)
        {
        objMyResponse = new MyResponse();
        objMyResponse.BeforeName = "BeforeName" + i;
        }
    else
        {
        objMyResponse.AfterName = "AfterName" + i;
        }
    return objMyResponse;
    }

И это не совсем очевидный способ сделать что-либо из этого ... похоже, что кто-то сразу же бросился в кодирование, совершенно не думая о том, что он пытается сделать. Я понятия не имею, почему класс аудита вообще существует или почему его единственный метод не статичен.
Честно говоря, я бы снова начал с нуля после того, как снова прочитал свой вопрос о домашнем задании, очень внимательно и думал о дизайне по крайней мере десять минут, прежде чем начать что-либо кодировать.