小编Kie*_*lin的帖子

在新任务中使用的依赖注入服务

我正在使用依赖注入来在需要时访问我的服务,但我现在想要创建并发任务,但这会导致由于依赖注入对象及其生命周期引起的问题.

我已经阅读了这篇文章(标题:防止多线程):链接 从那以后,我发现这是不可能的.

我的目标是让客户端发送一个请求来开始一个可能需要比客户端的连接超时更长的工作,因此我希望有一个端点启动任务并返回任务是否已成功启动的状态.

问题是因为数据库上下文和其他服务是在请求的线程内的控制器上创建的,当您将该对象传递给新任务并结束旧任务时,对象会因为它们被创建而被处置在说的线程上.

我知道对于数据库上下文,您可以注入数据库工厂接口并创建一个新实例,但这对我的非数据库对象没有帮助.(我还读到创建自己的服务实例会破坏依赖注入点).

有没有办法可以在新线程/任务上创建注入依赖项的新实例,或者完全避免这个问题?谢谢.

c# multithreading dependency-injection asp.net-core

7
推荐指数
1
解决办法
2190
查看次数

Entity Framework Core 中的内存管理

我试图请求大量数据,然后将其解析为报告。问题是我请求的数据有 2700 万行记录,每行记录有 6 个连接,当通过实体框架加载时,会使用所有服务器 RAM。我实现了一个分页系统,将处理缓冲成更小的块,就像处理 IO 操作一样。

我请求 10,000 条记录,将它们写入文件流(写入磁盘),然后我尝试从内存中清除这 10,000 条记录,因为它们不再需要。

我在垃圾收集数据库上下文时遇到问题。我尝试过处理该对象,将引用清空,然后在下一批 10,000 条记录上创建新的上下文。这似乎不起作用。(这是 ef core 上的一位开发人员推荐的:https://github.com/aspnet/EntityFramework/issues/5473

我看到的唯一的其他选择是使用原始 SQL 查询来实现我想要的。我正在尝试构建系统来处理任何大小的请求,唯一的可变因素是生成报告所需的时间。我可以使用 EF 上下文执行某些操作来删除已加载的实体吗?

 private void ProcessReport(ZipArchive zip, int page, int pageSize)
        {
            using (var context = new DBContext(_contextOptions))
            {
                var batch = GetDataFromIndex(page, pageSize, context).ToArray();
                if (!batch.Any())
                {
                    return;
                }

                var file = zip.CreateEntry("file_" + page + ".csv");
                using (var entryStream = file.Open())
                using (var streamWriter = new StreamWriter(entryStream))
                {
                    foreach (var reading in batch)
                    {
                        try …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework asp.net-core

6
推荐指数
1
解决办法
1万
查看次数

Android Emulator 实例不显示“允许 USB 调试”确认以进行身份​​验证

我正在尝试在 Android Studio 的 Android Emulator 中运行我的移动应用程序。当我运行应用程序时,它会提示我选择模拟器实例:

在此处输入图片说明

当我选择一个模拟器实例时,应用程序的构建开始并且选定的模拟器启动。

在此处输入图片说明

构建完成后,Android Studio 告诉我它“正在等待目标设备上线”,以便它可以通过网桥进行身份验证。

等待一段时间后,我没有收到带有 RSA 指纹的“允许 USB 调试”确认,因此我启用了开发人员模式并进入设置。

然后我尝试关闭“USB调试”设置,然后重新打开,然后在我的计算机上重新启动ADB服务,这导致ADB服务要求我授权设备(我无法获得确认)

在此处输入图片说明

我已经尝试过其他几个 Android 版本,其中只有一个有效(API 27)(该版本在操作系统启动后立即向我显示允许确认窗口)我还检查了是否在工作中启用了开发人员选项操作系统(API 27),它们不是这表明操作系统映像是预先配置的,因为它们是模拟器,我不需要触摸任何设置。

这感觉像是一个图像问题,因为其中一个图像(API 27)确实有效。有谁知道为什么我无法让其他 API 版本提示我对远程目标进行身份验证?

需要注意的一件事:在不起作用的版本上,我看不到设备上的 USB 端口,Developer Options -> Select USB configuration但在一张工作图像上,我可以看到检测到 USB 端口并设置为“正在充电”。

API 27(有效的图像):

API 27(有效的图像)

API 25(不起作用的图像):

在此处输入图片说明

在此处输入图片说明

这是我希望看到的提示,以便 ADB 服务可以与设备通信:

在此处输入图片说明

android android-emulator

5
推荐指数
1
解决办法
3344
查看次数