标签: resource-management

HttpContext.GetGlobalResourceObject始终返回null

我在App_GlobalResources文件夹中创建了两个文件:

SiteResources.en-US.resx
SiteResources.sp-SP.resx
Run Code Online (Sandbox Code Playgroud)

两者都包含"SiteTitleSeparator"的值.

这是我想要做的(以下行总是返回null):

string sep = (string)GetGlobalResourceObject("SiteResources", "SiteTitle");
Run Code Online (Sandbox Code Playgroud)

请注意,页面上的Culture属性已设置.

VB和C#中的答案都将受到欢迎.

asp.net globalization resources resource-management resourcemanager

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

使用带有字符指针的RAII

我看到很多RAII示例类包装文件句柄.

我试图在没有运气的情况下将这些示例适用于字符指针.

我正在使用的库具有获取字符指针地址的函数(声明为get_me_a_string(char**x)).这些函数为该字符指针分配内存,并将其留给库的最终用户,以便在自己的代码中清理它.

所以,我的代码看起来像这样......

char* a = NULL;
char* b = NULL;
char* c = NULL;

get_me_a_string(&a);
if(a == NULL){
    return;
}


get_me_a_beer(&b);
if(b == NULL){
    if(a != NULL){
        free(a);
    }
    return;
}


get_me_something(&c);
if(c == NULL){
    if(a != NULL){
        free(a);
    }
    if(b != NULL){
        free(b);
    }
    return;
}

if(a != NULL){
    free(a);
}
if(b != NULL){
    free(b);
}
if(a != NULL){
    free(b);
}
Run Code Online (Sandbox Code Playgroud)

听起来RAII就是我上面这个烂摊子的答案.有人可以提供一个简单的C++类来包装char*而不是FILE*吗?

谢谢

c++ memory-management raii resource-management

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

什么时候std :: shared_ptr释放它的对象?

我使用GCC 4.8.4在Ubuntu 14.04上,我的代码类似于以下内容:

std::shared_ptr<MyClass> my_shared_object = set elsewhere...
MyFunction(*my_shared_object);
Run Code Online (Sandbox Code Playgroud)

其中MyFunction的签名如下所示:

void MyFunction(const MyClass& my_object)
Run Code Online (Sandbox Code Playgroud)

完整的代码可以在这里找到

但是,我发现my_object实际上超出了范围MyFunction.我的想法是,my_shared_object只有在超出范围后,意志才会释放其内容,这意味着在MyFunction返回之后.我不确定我是误解std::shared_ptr还是可能这是一个GCC错误.

我想这个问题归结为:当我取消引用std :: shared_ptr时,这是否保证std::shared_ptr只要使用取消引用就会持续存在?

c++ resource-management shared-ptr c++11

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

关闭存储在Option []中的资源

我有一个存储在选项中的资源对象.

 private var ochan: Option[Channel] = None
Run Code Online (Sandbox Code Playgroud)

在程序执行期间的某个时刻,ochan设置为Some(channel).我想关闭通道(通过调用方法close)并将选项设置为None一个致命的猛扑.

目前我有:

 def disconnect = ochan = { ochan.foreach{_.close}; None }
Run Code Online (Sandbox Code Playgroud)

以前我曾经:

 def disconnect = ochan = ochan.flatMap{ o => o.close; None }
Run Code Online (Sandbox Code Playgroud)

有一个更好的方法吗?

resources scala resource-management

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

是否有编程语言的例子支持除内存之外的资源自动管理?

自动内存管理的想法已经获得了新的编程语言的大力支持.我有兴趣是否存在自动管理其他资源(如文件,网络套接字等)的概念?

programming-languages resource-management language-concepts

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

不会丢弃的静态变量

static StreamWriter我班上有一个变量:

private static StreamWriter streamWriter = CreateStreamWriter(pathToFile);
Run Code Online (Sandbox Code Playgroud)

我没有在我的应用程序中关闭此StreamWriter,因为它需要在应用程序运行时打开.

如果我多次启动和停止此应用程序,是否会出现内存泄漏?或者关闭应用程序后对象是否正确处理?

此类是ASP.NET MVC 4和WPF应用程序使用的实用程序类.

感谢大家的回复.这是我添加的代码:

在包含StreamWriter的类中:

public static void OnApplicationExit(object sender, EventArgs e)
{
    try
    {
        streamWriter.Flush();
        streamWriter.Close();
        streamWriter.Dispose();
    }
    catch { }
}

public static void OnApplicationExit()
{
    try
    {
        streamWriter.Flush();
        streamWriter.Close();
        streamWriter.Dispose();
    }
    catch { }
}
Run Code Online (Sandbox Code Playgroud)

在ASP.NET MVC Global.Asax中:

    protected void Application_End()
    {
        Utilities.MyClass.OnApplicationExit();
    }
Run Code Online (Sandbox Code Playgroud)

c# dispose memory-leaks memory-management resource-management

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

C++有一个像unique_ptr这样的智能指针,带有"构造前的破坏"语义吗?

问题

考虑这个简单的类:

struct C {
   C(const char* name) : name(name) {
         cout << "constructing " << name  << endl;
   }

   ~C() {
       cout << "destructing " << name << endl;
   }

   string name;
};
Run Code Online (Sandbox Code Playgroud)

我想有一个指向这个类的实例的指针,它通常被另一个实例替换.但是,我希望创建新实例之前销毁当前实例.

错误的例子

如果我unique_ptr以正常方式使用a ,这不起作用:

unique_ptr<C> c( new C("the first one"));
c.reset(new C("the second one"));
Run Code Online (Sandbox Code Playgroud)

(不受欢迎的)输出:

构建第一个

构建第二个

破坏第一个

破坏第二个

丑陋的例子

可以如下实现期望的效果:

unique_ptr<C> c( new C("the first one"));
c.reset();  // explicitly destruct the first one first
c.reset(new C("the second one"));
Run Code Online (Sandbox Code Playgroud)

输出: …

c++ smart-pointers resource-management resourcemanager unique-ptr

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

C++正确的方法来释放自定义类的向量

我有我的自定义类,如:

class MyClass {

   public:
        int i;
        std:string name;

        void DoSomeStuff();

}
Run Code Online (Sandbox Code Playgroud)

和另一个包含我的自定义类列表的类:

class MyClassList {

    public:
        std::vector<MyClasss> myClassList;
}
Run Code Online (Sandbox Code Playgroud)

如何释放列表析构函数以释放内存中所有使用的向量空间:

MyClassList::~MyClassList 
{
    myClassList.clear();
    delete &myClassList;
}
Run Code Online (Sandbox Code Playgroud)

该代码是正确的,冗余的还是错的?

谢谢你的帮助......

c++ memory destructor vector resource-management

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

golang 资源所有权模式(文件、连接、关闭权限)

在 golang 中管理资源所有权的正确方法是什么?假设我有以下内容:

db, err := sql.Open("mysql", "role@/test_db")
am := NewResourceManager(db)
am.DoWork()
db.Close()
Run Code Online (Sandbox Code Playgroud)

总是让调用函数维护关闭资源的所有权和责任是典型的吗?这对我来说感觉有点奇怪,因为在关闭后,am仍然保留一个引用,db如果我或其他人稍后不小心,可以尝试使用(我想这是延迟的情况;但是,如果我想将 ResourceManager 传am回从这个块,我什至如何正确推迟文件的关闭?我实际上希望它在这个块完成执行时保持打开状态)。我发现在其他语言中,我经常希望允许实例管理资源,然后在调用析构函数时将其清理干净,就像这个玩具 python 示例:

class Writer():
   def __init__(self, filename):
       self.f = open(filename, 'w+')

   def __del__(self):
       self.f.close()

   def write(value):
       self.f.write(value)
Run Code Online (Sandbox Code Playgroud)

不幸的是,golang 中没有析构函数。除了这样的事情,我不知道我会如何在 go 中做到这一点:

type ResourceManager interface {
   DoWork()
   // Close() ?
}

type resourceManager struct {
  db *sql.DB
}

func NewResourceManager(db *sql.DB) ResourceManager {
  return &resourceManager{db}
} 

db, err := sql.Open("mysql", "role@/test_db")
am := NewResourceManager(db)
am.DoWork()
am.Close()  // using method …
Run Code Online (Sandbox Code Playgroud)

resources resource-management go

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