我有一个非常简单的Unity WebGL项目,我试图从连接到SQL Server数据库。
当我在编辑器中运行项目时,它工作得很好。
当我运行WebGL构建时,只要我尝试打开DB连接,我就会得到"内存不足";弹出窗口和控制台中出现此错误:
PrototypeProject.loader.js:1不能扩大内存数组。(1)编译-s TOTAL_MEMORY=X, X比当前值高2144141312,(2)编译-s ALLOW_MEMORY_GROWTH=1,允许在运行时增加大小,如果您希望malloc返回,则使用(3)NULL(0)代替这个abort,用-s ABORTING_MALLOC=0编译
我的理解是,错误中包含的建议已经过时,因为允许内存增长默认为启用,并且在最近版本的Unity中没有总内存设置。我不明白为什么(3)会是一件明智的事情
我知道这个问题是由连接触发的(每次)。打开是因为这些调试行中的第一行是输出,而第二行不是
SqlConnection connection = new SqlConnection(connectionString);
Debug.Log("Calling connection.open");
connection.Open();
Console.WriteLine("Connection open");
一种选择是停止尝试直接连接到数据库,并调用一个web服务来代替数据库工作。是的,我知道三层架构在任何情况下都是一种更好的设计——这是一种(显然是失败的)快速创建原型的方法
但是我真的很想了解这里发生了什么,以防将来我可能有类似的问题。我知道某些东西必须是使您耗尽内存的临界点,但是仅仅打开连接并不直观地(但也许我错了……)看起来应该是一个巨大的内存消耗,并且当在编辑器中使用Profiler时,我看不到任何明显的差异
有没有人在故障排除SQL Server连接,特别是,或一般内存问题,在WebGL,可能是相关的理解和避免这种行为的经验?
答案比我预期的要基本得多-在WebGL构建中不可能使用SqlConnection,因为SqlConnection反过来试图使用WebGL构建无法访问的套接字
这就是为什么显示为"内存不足"的原因。错误,或者为什么Unity编辑器不能更有帮助,并警告你,你正在使用的类是不会工作的,当你开始一个WebGL构建,我还不明白…