小编Ric*_*ick的帖子

JNI NewByteArray内存泄漏

我有一个处理位图并返回String的Java方法.当我从JNI(VS 2010)调用此方法时,它可以正常工作,但如果我多次调用此方法,则进程的内存会长大,直到崩溃.使用大量内存的指令是:

jbyteArray jBuff = _env->NewByteArray(b->Length);
Run Code Online (Sandbox Code Playgroud)

我的代码:

static jobject staticArray=0;

System::String^ MyClass::ExecuteJavaMethod(System::Drawing::Bitmap^ bmp)
{
    JNIEnv *_env;
    System::String^ out;
    unsigned const char * buff;

    int res = jvm->AttachCurrentThread((void **)&_env, NULL);

    if (jvm->GetEnv((void**) &_env, JNI_VERSION_1_6) != JNI_OK)
    {
        return "GetEnv ERROR";
    }

    //save the bitmap in the stream
    MemoryStream^ ms = gcnew MemoryStream();
    bmp->Save(ms, ImageFormat::Bmp);

    //get the bitmap buffer
    array<unsigned char>^b = ms->GetBuffer() ;

    //unmanaged conversion
    buff = GetUnmanaged(b,b->Length);


    //fill the buffer
    jbyteArray jBuff = _env->NewByteArray(b->Length);       
    _env->SetByteArrayRegion(jBuff, 0, b->Length, (jbyte*) buff);

    //call …
Run Code Online (Sandbox Code Playgroud)

java java-native-interface visual-studio-2010 visual-c++

11
推荐指数
1
解决办法
2万
查看次数

使用范围内的随机DECIMAL编号更新表(SQL Server)

我想更新表项的列ItemValue,其中包含在1和100之间随机生成的十进制值(每行的值不同).每个值应该有两个(随机)数字.

CREATE TABLE Items
(
    ItemID int IDENTITY(1,1) NOT NULL,
    ItemValue decimal(13, 4) NULL,
    CONSTRAINT PK_Items PRIMARY KEY CLUSTERED (ItemID ASC)
)

INSERT INTO Items(ItemValue) VALUES (0)
INSERT INTO Items(ItemValue) VALUES (0)
INSERT INTO Items(ItemValue) VALUES (0)
INSERT INTO Items(ItemValue) VALUES (0)

-- Now, I want to update the table
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server

6
推荐指数
2
解决办法
4232
查看次数

缩放 SKImage 的最快方法 (SkiaSharp)

我正在寻找调整 SKImage 大小的最快方法。不幸的是我发现了一些例子。

我问这个问题是因为如果我并行执行这些函数(在我的例子中大约有 60 个线程),每个缩放函数的执行时间会增加多达二十倍。

我尝试了以下方法,性能看起来非常相似,有什么更好的吗?

方法一:

SKImage src = (...);
SKImageInfo info = new SKImageInfo(width, height, SKColorType.Bgra8888);
SKImage output = SKImage.Create(info);
src.ScalePixels(output.PeekPixels(), SKFilterQuality.None);
Run Code Online (Sandbox Code Playgroud)

方法二:

SKImage src = (...);
SKImage output;
float resizeFactorX = (float)width / (float)Src.Width;
float resizeFactorY = (float)height / (float)Src.Height;

using (SKSurface surface = SKSurface.Create((int)(Src.Width * 
       resizeFactorX), (int)(Src.Height * resizeFactorY),
       SKColorType.Bgra8888, SKAlphaType.Opaque))
{
  surface.Canvas.SetMatrix(SKMatrix.MakeScale(resizeFactorX, resizeFactorY));
  surface.Canvas.DrawImage(Src, 0, 0);
  surface.Canvas.Flush();
  output = surface.Snapshot();
}
Run Code Online (Sandbox Code Playgroud)

.net c# image-processing skiasharp

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