VB.Net Dispose / Garbage Collector不释放资源?

时间:2016-07-15 22:05:21

标签: .net vb.net visual-studio

在这里使用VS 2015 ...刚刚制作了一个小型测试程序,用于比较使用任务的异步webrequest与我之前使用HttpWebRequest.BeginGetResponse

之前的方式之间的性能差异

但重点是我试图通过实现IDispoable来处理我用于异步请求的状态对象,但是在我的诊断中它显示分配的RAM大小保持不变?我的印象是调用dispose会释放对象使用的资源?这是我正在使用的代码,我也尝试将对象设置为Nothing。

var data = [{
            firstName: "Antonio",
            lastName: "Moreno",
            title: "Team Lead",
            colorScheme: "#1696d3"
        },
        {
            firstName: "Alfredo",
            lastName: "Morales",
            title: "Team Lead",
            colorScheme: "#1696d3"

        }];

        function visualTemplate(options) {
            var dataviz = kendo.dataviz;
            var g = new dataviz.diagram.Group();
            var dataItem = options.dataItem;

            g.append(new dataviz.diagram.Rectangle({
                width: 210,
                height: 75,
                stroke: {
                    width: 0
                },
                fill: {
                    gradient: {
                        type: "linear",
                        stops: [{
                            color: dataItem.colorScheme,
                            offset: 0,
                            opacity: 0.5
                        }, {
                            color: dataItem.colorScheme,
                            offset: 1,
                            opacity: 1
                        }]
                    }
                }
            }));

            g.append(new dataviz.diagram.TextBlock({
                text: dataItem.firstName + " " + dataItem.lastName,
                x: 85,
                y: 20,
                fill: "#fff"
            }));

            g.append(new dataviz.diagram.TextBlock({
                text: dataItem.title,
                x: 85,
                y: 40,
                fill: "#fff"
            }));

            return g;
        }

        function createDiagram() {
            $("#diagram").kendoDiagram({
                dataSource: new kendo.data.HierarchicalDataSource({
                    data: data,
                }),
                shapeDefaults: {
                    visual: visualTemplate
                },
            });

            var diagram = $("#diagram").getKendoDiagram();
            diagram.bringIntoView(diagram.shapes);
        }

        $(document).ready(createDiagram);

1 个答案:

答案 0 :(得分:1)

简单地实现IDisposable不会自动释放内存,所有这些都取决于程序员释放托管和非托管资源。

Dispose(disposing As Boolean)方法中,您必须在实现处置功能的每个变量上调用Close()Dispose()

Protected Overridable Sub Dispose(disposing As Boolean)
    If Not disposedValue Then
        If disposing Then
            'Here you dispose all managed resources.
            respStream.Close()
            respStream.Dispose()
            resp.Close()
        End If
    End If
    disposedValue = True
End Sub

完成异步操作后,请务必关闭IAsyncResult.AsyncWaitHandle对象。您应该能够在每个回调方法的最后执行此操作:

ar.Close()