gpt4 book ai didi

c# - 在内存数据库中使用 Typescript/javascript 的性能问题

转载 作者:太空狗 更新时间:2023-10-29 17:58:55 27 4
gpt4 key购买 nike

我有一个用 c# 开发的服务器端,使用 Entity Framework 作为 SQL 服务器的提供程序。我的服务器正在管理学生和类(class)之间的多对多关系。

  public class Student
{

public List<Course> Courses
.
.
}

public class Course
{
public List<Student> Students
.
.
}

我的客户端是使用 Typscript 在 angular js 中开发的。为了与服务器同步,服务器中的每个更改都会通过推送通知 (signalr) 推送到客户端。

为了更快的响应时间,我的客户在内存中保留了一种数据库(因为数据量不是很大,不到 500 条记录)。我保留了一系列学生,并为他们每个人保留了一系列类(class):

     Students: { [studentId: number] : Courses } ={}

在那个对象中,我在客户端跟踪所有学生和他们的类(class)。

在我的应用程序中,我可以选择从整个系统中删除多门类(class)。然而,当做这样的事情时,当 Action 在服务器端成功完成时,当有很多学生时,客户端的处理变得很重。那是因为我需要遍历所有已删除的类(class),并为每个类(class)遍历整个学生数组以从学生数组中找到并删除这些类(class)。 (或者先迭代已删除的类(class),然后在学生中迭代)- 两者都很重,需要一段时间。

是否有更好的设计?我应该以不同的方式处理这个问题吗?

最佳答案

我想到了一些事情:

  1. 检查您是否真的需要“客户端数据库”。你的后端这么慢吗?是不是 premature optimation ?我认为如果您删除这部分,您的客户端程序的复杂性将大大降低......只需在需要时直接从服务器获取最新数据即可。

  2. 如果发生重大变化,请重新加载整个“客户端数据库”。

  3. 优化您的“客户数据库”。删除几百个项目应该不会花太长时间......你在使用 angular.forEach 吗? It could slow you down significantly .您是否有几百名学生,但只有几门被删除的类(class)?迭代学生,然后才(在迭代内)迭代已删除的类(class)。伪代码:

    for (student in students) {
    for (deletedCourse in deletedCourses) {
    student.removeCourse(deletedCourse);
    }
    }

    不是这样的:

    for (deletedCourse in deletedCourses) {
    for (student in students) {
    student.removeCourse(deletedCourse);
    }
    }

    这样一来,您将重复更多操作并浪费时间。但如果没有您的源代码,很难知道。

一般来说,您应该分析您的代码并查明性能问题。将不同方法所需的时间记录到控制台并相应地进行选择。

关于c# - 在内存数据库中使用 Typescript/javascript 的性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46032080/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com