sql-server - 为什么 SqlConnection.Open() 在 Unity WebGL 应用程序中触发“无法扩大内存数组”错误
问题描述
我有一个非常简单的 Unity WebGL 项目,我试图从中连接到 SQL Server 数据库。
当我在编辑器中运行项目时,它工作正常。
当我运行 WebGL 构建时,一旦我尝试打开数据库连接,就会弹出“内存不足”弹出窗口,并且控制台中出现以下错误:
PrototypeProject.loader.js:1 无法扩大内存数组。(1) 使用 -s TOTAL_MEMORY=X 编译,其中 X 高于当前值 2144141312,(2) 使用 -s ALLOW_MEMORY_GROWTH=1 编译,允许在运行时增加大小,或者 (3) 如果您希望 malloc 返回 NULL ( 0) 用 -s ABORTING_MALLOC=0 编译而不是这个中止
我的理解是错误中包含的建议已过时,因为允许内存增长默认为启用,并且最近版本的 Unity 中没有总内存设置。我不明白为什么(3)会是一件明智的事情
我知道问题是由connection.Open(每次)触发的,因为这些调试行中的第一个是输出但第二个不是
SqlConnection connection = new SqlConnection(connectionString);
Debug.Log("Calling connection.open");
connection.Open();
Console.WriteLine("Connection open");
一种选择是停止尝试直接连接到数据库并调用 Web 服务来代替数据库工作。是的,我知道在任何情况下拥有三层架构都是更好的设计——这种方法被用于(失败的,显然)努力快速原型化
但是,我真的很想了解这里发生了什么,以防我将来可能遇到类似的问题。我知道有些东西一定是让你内存不足的临界点,但只是打开一个连接并不直观(但也许我错了......)似乎它应该是一个巨大的内存猪,我可以'在编辑器中使用 Profiler 时看不到任何明显的差异
是否有任何人在排除 WebGL 中的 SQL Server 连接或一般内存问题方面有任何经验,这可能与理解和避免这种行为有关?
解决方案
答案比我预期的要简陋得多 - 在 WebGL 构建中使用 SqlConnection 是不可能的,因为 SqlConnection 反过来又试图使用 WebGL 构建无法访问的套接字
究竟为什么这表现为“内存不足”错误,或者为什么 Unity 编辑器不能提供更多帮助并警告您正在使用在开始 WebGL 构建时无法工作的类,我确实这样做了还不明白……
推荐阅读
- android - 如何将前 4 个项目从 recyclerView 设置为可见性消失?
- java - 我试图实现插入排序方法,但我没有得到写入数组排序
- php - Laravel 中的 orderBy() 方法是否提供针对 sql 注入的保护?
- asp.net-core-mvc - 内存缓存中的 Dotnet Core - 默认到期时间是什么
- ios - 重新加载表格视图的选定单元格
- ag-grid - AgGrid 树网格在同一组级别上不显示相同的叶子名称项
- tig - 尝试在 tigrc 中设置配置时出错
- javascript - 关于无服务器功能的基本 Node.js 问题
- angular5 - 响应中的 Http 拦截器在角度 5 中不起作用
- mysql - MySqlDataReader 强制转换函数,wpf