小编Ser*_*rov的帖子

将对象保留在GC销毁尝试上

我在考虑回收物品的方法时得到了这个想法.我这样做是为了看看内存池是如何工作的,我意识到在99%的场景中这是非常不必要的.

但是,我有一个问题.有没有办法强制GC保持对象?换句话说,我可以告诉GC不要销毁一个对象,并说在一个可用于使用对象的列表中创建了新的引用吗?虽然我没有测试过这个问题,但是如果我在列表中添加这样的东西:

~myObject()
{
     ((List<myObject>)HttpContext.Current.Items[typeof(T).ToString()]).add(this);//Lets assume this is ASP
}
Run Code Online (Sandbox Code Playgroud)

它会将一个指向此对象的指针添加到列表中,但如果该对象被销毁,我将得到一个空指针异常,因为该对象不再存在.但是,也许我可以告诉GC不要收集这个项目,从而保留对象?

我知道这是大多数程序员会选择的东西"你为什么要这样做?".但另一方面,编程是关于尝试新事物和学习新事物.有什么建议,想法,实施吗?任何帮助将不胜感激!

c# garbage-collection

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

如何在ServiceStack.OrmLite中自定义复杂类型的序列化/反序列化

我正在使用ServiceStack.OrmLite将数据保存在SQLite数据库中,并且到目前为止对此非常满意.

但是,我的许多对象都具有复杂类型的属性,我不想将其序列化使用JSV.

我需要能够指定应该用于在数据库中存储属性的自定义序列化/反序列化(作为字符串).在db4o世界上,这相当于使用由提供的翻译功能IObjectConstructor.

无法正确序列化和反序列化的复杂类型的一个很好的例子是NodaTime类型,即使它们可以很容易地映射到字符串(我已经拥有了我使用的序列化/反序列化函数db4o).

实现这一目标的最简单方法是什么?包装器不是很方便,因为我必须为包含这种复杂类型属性的每种类型编写和维护一个包装器.

c# servicestack nodatime ormlite-servicestack servicestack-text

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

ASP.NET中的静态对象浪费内存?

前几天我只是想知道这件事.我不确定ASPX如何管理垃圾处理,但据我所知,"完成加载"不会删除静态内存值或页面重新加载后.静态至少在C方面意味着内存分配遵循程序,直到程序本身关闭.在ASPX中这是一样的吗?如果我有一个静态值并且我从页面A转到页面B,那么静态值是否仍然存在于RAM中,直到它们离开应用程序或者当我不再在页面A上时该值被删除?(转到另一个网站,将其实例从服务器中的应用程序池中删除).

根据我的经验:

  public static class foo
  {
      public static int x;
  }

  protected void Page_Load(object sender, EventArgs e)
  {
      foo.x++; //This will continue to increment from the last value before reload
  }
Run Code Online (Sandbox Code Playgroud)

c# asp.net memory-management

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

在Android上没有调用onDrawFrame

我有一个问题,渲染器对象似乎根本没有被onDrawFrame调用.调试器永远不会在函数内部遇到断点.因此,我的广场不是画画.这是代码,如果您还需要其他信息,请告诉我:

public class renderer implements GLSurfaceView.Renderer {

Square square;

public void onDrawFrame(GL10 unused) {
    GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);
    square.Draw();
}

public void onSurfaceChanged(GL10 gl, int width, int height) {
    GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);
}

public void onSurfaceCreated(GL10 unused, int width, int height) {
    GLES20.glViewport(0, 0, width, height);

}

public void onSurfaceCreated(GL10 gl, EGLConfig config) {
    square = new Square(5, 5);

}
Run Code Online (Sandbox Code Playgroud)

主要活动是:

public class gameActivity extends Activity {
/** Called when the activity is first created. */

private GLSurfaceView mGLView;

@Override
public void onCreate(Bundle …
Run Code Online (Sandbox Code Playgroud)

java android

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

即使firefox说代码200,JQuery.AJAX也会失败

即使它生成的URL有效,我也无法让jQuery返回成功.代码如下:

    var baseURL = "http://api.rottentomatoes.com/api/public/v1.0.json";
    var apiKey = "myAPIKEy";

    $.ajax
    ({
        type: "GET",
        url: baseURL,
        data: { apikey: apiKey },
        success:function()
        {
            alert('here');
        },
        complete:function(data)
        {
            return data;
        }
    });
Run Code Online (Sandbox Code Playgroud)

它没有成功(我拿出了失败但它失败了).我不知道为什么这会失败,因为我复制粘贴生成的URL并且它可以工作并回吐响应.请告诉我我能提供的其他信息.我很抱歉有点模糊.任何帮助是极大的赞赏!!!

javascript ajax jquery

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

什么是DX :: ThrowIfFailed?

我最近回到了C++.我已经使用C#远离C++/CLI至少一年了,而且我有点生疏了.我正在查看Windows 8的Direct3D应用程序的基本示例,但无法找到解释内容的任何内容

 DX::ThrowIfFailed
Run Code Online (Sandbox Code Playgroud)

确实.根据它所说的,如果DirectX中的某些内容失败,它将执行某些操作,但是从实现看起来它似乎用于初始化东西作为Direct3D的基础演示:

    Platform::String^ text = "Hello, DirectX!";

DX::ThrowIfFailed(
    m_dwriteFactory->CreateTextLayout(
        message->Data(),
        message->Length(),
        m_textFormat.Get(),
        700, // maxWidth.
        1000, // maxHeight.
        &m_textLayout
        )
    );
Run Code Online (Sandbox Code Playgroud)

有人可以向我解释这个功能是如何工作的.我看到它散落在各个例子中,但谷歌搜索量没有减少适当的文档.提前谢谢你!

c++ visual-c++ c++-cx

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

JavaScript中的深层嵌套函数

我找不到一个适当的例子来说明我对生活的热爱如何做到这一点,或者即使这是可能的.根据我对exmaples片段的拼凑理解,我提出了以下结构

         var t = function()
         {
             this.nestedOne = function()
             {
                 this.nest = function()
                 {
                     alert("here");
                 }
             }
         } 
         t.nestedOne.nest();
Run Code Online (Sandbox Code Playgroud)

然而,这显然不起作用(显然).如果有人能指出我正确的方向,我将不胜感激!

javascript

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

将字符串(System.String)转换为类型

我正在尝试创建一个通用的XML到对象转换器.换句话说,以下是我的XML

<setting>
   <name>testing</name> 
   <type>System.String</type>
   <defaultObj>TTTT</defaultObj>
</setting>
Run Code Online (Sandbox Code Playgroud)

type字段保存其加载的对象的类型.这只是我所选择的对象结构.无论如何,我遇到了转换问题

System.String
Run Code Online (Sandbox Code Playgroud)

到一个实际的类型变量.所以,例如,为了转换我有以下代码:

foreach (XNode node in document.Element(root).Nodes())
{
   T variable = new T(); //where T : new()

   foreach (FieldInfo field in fields)
   {
      field.SetValue(variable, Convert.ChangeType(((XElement)node).Element(field.Name).Value, field.FieldType));
   }

   retainedList.Add(variable);
}
Run Code Online (Sandbox Code Playgroud)

以通用方式获取对象.该算法完美运行,直到遇到Type字段.我得到一个:

Invalid cast from 'System.String' to 'System.Type'.
Run Code Online (Sandbox Code Playgroud)

运行时错误.据我所知,直接将类型标识符(字符串)直接转换为类型存在问题.我不知道如何解决这个问题,至少在保持通用和清洁方面.有任何想法吗?如果问题有点模糊,我很抱歉,如果你不太明白我会尝试进一步澄清.任何帮助是极大的赞赏!

c# xml linq

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

代码只有在使用调试器单步执行时才能正确运行?

可能重复:
随机数生成器仅生成一个随机数

不久前我对此感到有些困惑.我有以下代码:

public blockType generateRandomBlock()
{
    Random random = new Random();
    int makeBlockOfType = random.Next(0, 100);

    blockType t = blockType.normal;
    if (makeBlockOfType <= 80 && makeBlockOfType >= 60)
    {
        t = blockType.blue;
    }
    else if (makeBlockOfType > 80 && makeBlockOfType <= 95)
    {
        t = blockType.orange;
    }
    else if (makeBlockOfType > 95 && makeBlockOfType <= 100)
    {
        t = blockType.green;
    }

    return t;
}
Run Code Online (Sandbox Code Playgroud)

相当简单,它enum根据随机生成的数字(基于系统时间)返回一个值.不幸的是,由于一些奇怪的原因,我有所有的块都是一种颜色或另一种颜色,即使这是针对每个被放入游戏的块运行.但是,当我使用调试器逐步执行此操作,然后在运行一段时间后查看结果时,我发现块现在根据提供的机会多色.我对为什么会发生这种情况感到有些困惑.

为此,我使用MonoGame,它使用Mono编译器而不是Microsoft编译器.这可能是问题吗?我试图将此代码内联到构造函数中,从中调用它但我得到的结果相同(我猜测编译器无论如何都会内联代码).

我试图单独重启Visual Studio而不是让运行进行构建; 没有变化.

任何建议和帮助非常感谢!

c# mono xna monogame

5
推荐指数
2
解决办法
2182
查看次数

虽然有PK,但Context.SubmitChanges()没有更新

我遇到了C#中linq到DB实现提供的SubmitChanges函数的问题.当我运行该命令时,没有任何内容抛出错误,但记录永远不会更新.我已经查找了这个问题,几乎每个人都说它与表格有问题,没有什么是主键.但是我的表有一个主键分配给它,但SubmitChanges没有发生.为了概述我正在执行的内容,我在这里是一个示例:

public void setApproval(string approvalCode, int ID)
{
    using (DatabaseDataContext context = new DatabaseDataContext(DBConnection().getConnectionString()))
    {
        myRecord con = getRecord(ID); //Gets the record succesfully, PK field in tact
        con.ApprovalStatus = approvalCode;

        context.SubmitChanges();
    }
}
Run Code Online (Sandbox Code Playgroud)

如上所述,记录成功获得所有数据,包括用于识别它的PK字段.数据库连接用户有权更新表,但在这里我希望它能够破解和抱怨.

有任何想法吗?如果我没有提供足够的信息,请告诉我.任何帮助是极大的赞赏!

c# linq linq-to-sql

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