zoukankan      html  css  js  c++  java
  • 调试一段数据库调用的时候,内存彪到1.5G。请教为啥捏?

    这段神奇的sql是:

    string sql = "SELECT USR_BOX.SHOPCODE AS SHOPCODE, SYS_SHOPINFO.SHOPNAME AS SHOPNAME, USR_PROFILE.USERNAME AS USERNAME, ITM_ITEM.ITEMNAME AS ITEMNAME, STK_INVENTORYLOG.ITEMCODE AS ITEMCODE, STK_INVENTORYLOG.MERCHANTCODE AS MERCHANTCODE, STK_INVENTORYLOG.LOGSTOCKQTY AS LOGSTOCKQTY, STK_INVENTORYLOG.LOGCODE AS LOGCODE FROM ( ( ( ( STK_INVENTORYLOG INNER JOIN USR_PROFILE AS USR_PROFILE ON STK_INVENTORYLOG.MERCHANTCODE = USR_PROFILE.USERCODE ) INNER JOIN USR_BOX AS USR_BOX ON STK_INVENTORYLOG.SHOPCODE = USR_BOX.SHOPCODE ) INNER JOIN SYS_SHOPINFO AS SYS_SHOPINFO ON USR_BOX.SHOPCODE = SYS_SHOPINFO.SHOPCODE ) INNER JOIN ITM_ITEM AS ITM_ITEM ON STK_INVENTORYLOG.ITEMCODE = ITM_ITEM.ITEMCODE )";

    调用的代码是:

    代码
                INoebeCommand command = NoebeManager.Instance.NoebeCommand;
                
    //command.SQL = "DELETE from STK_INVENTORYLOG WHERE LOGCODE < 'STK20110108015119545301' AND LOGCODE >= 'STK20100108015119545301'";
                string sql = "SELECT USR_BOX.SHOPCODE AS SHOPCODE, SYS_SHOPINFO.SHOPNAME AS SHOPNAME, USR_PROFILE.USERNAME AS USERNAME, ITM_ITEM.ITEMNAME AS ITEMNAME, STK_INVENTORYLOG.ITEMCODE AS ITEMCODE, STK_INVENTORYLOG.MERCHANTCODE AS MERCHANTCODE, STK_INVENTORYLOG.LOGSTOCKQTY AS LOGSTOCKQTY, STK_INVENTORYLOG.LOGCODE AS LOGCODE FROM ( ( ( ( STK_INVENTORYLOG INNER JOIN USR_PROFILE AS USR_PROFILE ON STK_INVENTORYLOG.MERCHANTCODE = USR_PROFILE.USERCODE ) INNER JOIN USR_BOX AS USR_BOX ON STK_INVENTORYLOG.SHOPCODE = USR_BOX.SHOPCODE ) INNER JOIN SYS_SHOPINFO AS SYS_SHOPINFO ON USR_BOX.SHOPCODE = SYS_SHOPINFO.SHOPCODE ) INNER JOIN ITM_ITEM AS ITM_ITEM ON STK_INVENTORYLOG.ITEMCODE = ITM_ITEM.ITEMCODE )";
                command.SQL 
    = sql;
                
    //command.Execute();
                DataTable table = command.ExecuteReader();
                SmartConsole.Write(table);

    就是自己封装了sqlclient然后查询。

    大概就是4张表的inner join。数据库有数据2w(应该很少了。。。)数据库使用sqlserver 2005。

    结果不到半分钟,内存就彪到了1.5G了。而且还没有返回。

    我用profiler发现:

    最占资源的是string。再往里面看:

    貌似是.net里面造成的,不是我的问题。

    请教这个到底是咋回事。如果是微软的问题,能否问微软拿精神损失费呢?

    补充几点

    后来我修改了sql,发现问题在USR_BOX这张表。如果不做innerjoin,则不存在内存泄露。

  • 相关阅读:
    Automatic Setup of a Humanoid
    SLAM——视觉里程计(一)feature
    JSP和EL和JSTL
    rework-发出你的心声
    bootstrap单选框复选框的使用
    bootstrap输入框组
    vue中改变数组或对象,页面没做出对应的渲染
    bootstrap面板的使用
    bootstrap列表组的使用
    bootstrap表格的使用
  • 原文地址:https://www.cnblogs.com/zc22/p/1641862.html
Copyright © 2011-2022 走看看