小编Mar*_*rio的帖子

如何处理可写位图?(WPF)

前段时间我发布了一个与WriteableBitmap内存泄漏相关的问题,虽然我收到了与该问题相关的精彩提示,但我仍然认为有一个严重的错误/(我犯了错误)/(混乱)/(其他一些东西)这里.

所以,这是我的问题:

假设我们有一个带有图像和按钮的WPF应用程序.图像的源是一个非常大的位图(3600*4800像素),当它在运行时显示时,应用程序消耗~90 MB.

现在假设我希望从图像源(真正的大图像)实例化一个WriteableBitmap,当发生这种情况时,应用程序消耗大约220 MB.

现在到了棘手的部分,当对图像的修改(通过WriteableBitmap)结束时,对WriteableBitmap的所有引用(至少是我所知道的那些)都被销毁(在方法结束时或通过设置它们)为null)应释放writeableBitmap使用的内存,应用程序消耗应返回到~90 MB.问题是有时它会返回,有时却不会.

这是一个示例代码:

// The Image's source whas set previous to this event
private void buttonTest_Click(object sender, RoutedEventArgs e)
    {
        if (image.Source != null)
        {
            WriteableBitmap bitmap = new WriteableBitmap((BitmapSource)image.Source);

            bitmap.Lock();

            bitmap.Unlock();

            //image.Source = null;
            bitmap = null;
        }
    }
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,引用是本地的,并且应该在方法结束时释放内存(或者当垃圾收集器决定这样做时).但是,该应用程序可能消耗~224 MB直到宇宙结束.

任何帮助都会很棒.

memory dispose writeablebitmap

8
推荐指数
1
解决办法
7896
查看次数

WPF WriteableBitmap内存泄漏?

我正在试图找出如何释放WriteableBitmap内存.

在下一部分代码中,我填充了一个WriteableBitmap的后备缓冲区,其中包含来自"BigImage"(3600*4800 px,仅用于测试)的大量数据.如果我评论位图和图像等于null的行,那么内存即使不再使用图像和位图,它也不会发布,应用程序消耗大约230 MB!

正如您在代码末尾所看到的,调用GC.Collect()来释放内存是必要的.

所以问题是,释放WriteableBitmap对象使用的内存的正确方法是什么?GC.Collect()是唯一的方法吗?

任何帮助都会很棒.

PS.对不起,我的英语不好.

private void buttonTest_Click(object sender, RoutedEventArgs e)
{
            Image image = new Image();
            image.Source = new BitmapImage(new Uri("BigImage"));

            WriteableBitmap bitmap = new WriteableBitmap(
                (BitmapSource)image.Source);

            bitmap.Lock();

            // Bitmap processing

            bitmap.Unlock();

            image = null;
            bitmap = null;

            GC.Collect();
}
Run Code Online (Sandbox Code Playgroud)

wpf memory-leaks writeablebitmap

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

C++封装数组

对不起,如果之前有人询问,但我找不到足够明确的答案.

在C++中提供对数组成员的公共只读访问权的正确方法是什么?

如果我有类似以下的类:

   
class Particle
{
    double _position[10];

public:
    double* get_position()
    {
       return _position;
    }
};
   

我想要返回一个指向数组的指针真的很糟糕,因为这意味着它可以在类之外的任何时候更改,是否足以返回一个const指针?

我已经看到了关于在C++中使用数组的其他问题,以及如何使用向量是一个更好的选择,但我对这个问题非常好奇.

你可以看到我只是一个C++菜鸟,如果这是一个愚蠢的问题,对不起.

PD抱歉我的英语不好.

c++ arrays encapsulation

4
推荐指数
1
解决办法
1187
查看次数

WPF如何显示Image.Source(BitmapSource)像素位置?

假设我有一个以缩放方式显示其来源的图像,我如何使用MouseMove事件在标签或文本块中显示光标所在的像素位置?

(我需要像素坐标而不是图像相对于其大小的坐标)

提前致谢.

wpf pixel coordinates mousemove

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

g++ 和 msvc 中的 std::uniform_int_distribution<int> 范围

在做一个小学校项目时,我只是注意到以下范围的差异std::uniform_int_distribution<int>

使用 g++ 时,范围是 [a, b],但是当使用 msvc (Visual Studio 2010) 时,范围是 (a, b],因此以下程序的输出:

#include <iostream>
#include <random>

using std::cout;
using std::cin;

int main()
{
    std::mt19937 random;
    std::uniform_int_distribution<int> intDist(-1, 1);

    for(int i = 0; i < 100; i++)
    {
        cout << intDist(random) << "\n";
    }

    cin.get();
}
Run Code Online (Sandbox Code Playgroud)

使用 g++ 时会在某个时候显示 -1,但使用 msvc 时永远不会显示 -1。

我知道编译器之间存在这种差异是很常见的,但是请注意 MSDN 文档和范围应该是 [a, b] 的标准标记。

这种行为的原因是什么?

c++ random gcc visual-c++

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

C++简单多态问题

好吧,我承认,我是一个完全的C++菜鸟.

我正在检查Adam Drozdek在C++中的数据结构和算法,在第1.5节:"多态性"中他提出了下一个例子:

class Class1
{
public:
    virtual void f()
    {
        cout << "Function f() in Class1" << endl;
    }

    void g()
    {
        cout << "Function g() in Class1" << endl;
    }
};

class Class2
{
public:
    virtual void f()
    {
        cout << "Function f() in Class2" << endl;
    }

    void g()
    {
        cout << "Function g() in Class2" << endl;
    }
};

class Class3
{
public:
    virtual void  h()
    {
        cout << "Function h() in Class3" << endl;
    } …
Run Code Online (Sandbox Code Playgroud)

c++ polymorphism

0
推荐指数
1
解决办法
754
查看次数

具有负索引的多维数组访问

好吧,也许我很笨,但为什么下面的代码中没有抛出任何异常?

码

很明显,访问_cells数组的索引是负数(posCol + col = -1),如图所示.

提前致谢.

c#

-1
推荐指数
1
解决办法
184
查看次数